Страницы: 1
RSS
VBA. Прошу пояснить по методу GetOpenFilename
 
Метод GetOpenFilename возвращает переменную string (если не нажать Cancel) равную Путь + Имя выбранного файла.  
Вот интересно, чтобы "выкрутить" из этой переменной отдельно имя файла и отдельно путь к нему, нет ли какого-нибудь способа, не прибегая к текстовым функциям типа InstrRev?
 
Не самый точный способ (возможны ошибки в некоторых случаях), но работает:  
 
Sub test()  
   Путь = "C:\Documents and Settings\Игорь\Рабочий стол\tl018605.txt"  
   ИмяФайла = Dir(Путь)  
   Debug.Print ИмяФайла  
   Папка = Replace(Путь, ИмяФайла, "")  
   Debug.Print Папка  
End Sub  
 
 
Есть с десяток других способов.  
 
Например, вот гораздо более точный способ:  
 
Sub test2()  
   Путь = "C:\Documents and Settings\Игорь\Рабочий стол\tl018605.txt"  
   ИмяФайла = CreateObject("Scripting.FileSystemObject").GetFile(Путь).Name  
   Debug.Print ИмяФайла  
   Папка = CreateObject("Scripting.FileSystemObject").GetFile(Путь).Parentfolder.Path  
   Debug.Print Папка  
End Sub
 
спасибо!  
 
Приведу, на всякий случай, способ с текстовыми функциями (вдруг кому интересно станет), используя Ваши переменные:  
 
       x = InStrRev(Путь, Application.PathSeparator, -1, vbTextCompare)  
       ИмяФайла = Right(Путь, Len(Путь) - x)  
       Папка = Left(Путь, x - 1)
 
{quote}{login=EducatedFool}{date=24.02.2010 04:28}{thema=}{post}Не самый точный способ (возможны ошибки в некоторых случаях), но работает:  
<...>  
Например, вот гораздо более точный способ:  
{/post}{/quote}Интересно, в каких случаях Dir() даст ошибку?
Bite my shiny metal ass!      
 
Полагаю, что имелось в виду не Dir() выдаст ошибку, а Replace даст неверный результат.  
Например, если предположить что полный путь к файлу:  
 
G:\Test.xls\Test.xls  
 
По-разному же люди папки называют)))
 
думаю, что в первом примере корректнее использовать CurDir, вместо Replace  
 
Sub test()  
Путь = "C:\Documents and Settings\Игорь\Рабочий стол\tl018605.txt"  
ИмяФайла = Dir(Путь)  
Debug.Print ИмяФайла  
Папка = CurDir(Путь)  
Debug.Print Папка  
End Sub  
 
вроде имеет право на жизнь?...
 
> думаю, что в первом примере корректнее использовать CurDir, вместо Replace  
 
Нет, в данном случае CurDir использовать нельзя.  
Функция CurDir принимает в качестве параметра путь к диску, а не путь к файлу, и возвращает не совсем то, что нужно в данном случае.  
 
К примеру, проверьте такой код:  
 
Sub test()  
   Путь = "D:\шедевры\Новая папка\DSC01021.JPG"  
   ИмяФайла = Dir(Путь)  
   Debug.Print ИмяФайла  
   Папка = CurDir(Путь)  
   Debug.Print Папка ' возвращает "D:\" вместо "D:\шедевры\Новая папка"  
End Sub  
 
 
Или попробуйте прописать в переменную "Путь" другие пути к файлам, и понаблюдайте за результатом.
 
Я уже счастлив, что разобрались с CurDir, хотя не понимаю при чем она здесь.  
Но напомню момент, который заинтересовал меня:    
В каких случаях Dir() неточная?
Bite my shiny metal ass!      
 
{quote}{login=Лузер™}{date=25.02.2010 01:03}{thema=}{post}Я уже счастлив, что разобрались с CurDir, хотя не понимаю при чем она здесь.  
Но напомню момент, который заинтересовал меня:    
В каких случаях Dir() неточная?{/post}{/quote}  
 
Я говорил про случай, описанный air (с "G:\папка для Test.xls\Test.xls")
 
Простите меня, господа.  
Почему же у меня CurDir возвращает путь?
 
Еще раз прошу простить.  
Немного поторопился. Прилагаю более правильный.
 
{quote}{login=EducatedFool}{date=25.02.2010 02:08}{thema=Re: }{post}  
 
Я говорил про случай, описанный air (с "G:\папка для Test.xls\Test.xls"){/post}{/quote}Но это не проблема Dir() и даже не Replace.  
Было точное описание "Не самый точный способ (возможны ошибки в некоторых случаях)", которое я неверно отнес на счет функций. :)
Bite my shiny metal ass!      
 
{quote}{login=air}{date=25.02.2010 04:05}{thema=}{post}Простите меня, господа.  
Почему же у меня CurDir возвращает путь?{/post}{/quote}  
У меня на рабочем столе есть "Ярлык для FUNCS.XLS"  
Смотрите, что дает Ваш код для этого случая:  
Путь C:\Program Files\Microsoft Office\OFFICE11\1049\FUNCS.XLS  
ИмяФайла FUNCS.XLS  
Папка C:\Documents and Settings\user\Рабочий стол
Bite my shiny metal ass!      
 
Ну и правильно дает, разве нет, Лузер?  
Вы же просите имя и путь ярлыка, а не имя и путь файла, на который ссылается ярлык.  
 
PS. надо же... у меня ярлык для FUNCS.XLS в панели быстрого запуска))))
 
Правильно, никто не спорит. Просто иллюстрация того, что файл может быть в одном месте, а CurDir в другом.  
А файл полезный, согласен. Особенно, если еще справка по Excel4Macro прикручена.
Bite my shiny metal ass!      
 
Не посоветуете, как прикрутить справку, а то у меня не вышло.
 

1. Качаете файл отсюда: http://www.microsoft.com/downloads/details.aspx?FamilyID=C09BF7F7-D30E-4CE9-8930-5D03748CA5CD&displaylang=ru<BR>2. Распаковываете куда-нибудь <BR>3. Дважды тыкаете на функцию Excel4Macro в FUNCS.XLS. Эксель ругается, что не может найти xlmacr.hlp и предлагает указать его самостоятельно. <BR>4. Соглашаетесь и указываете путь к распакованному файлу. <BR>5. Наслаждаетесь.

Bite my shiny metal ass!      
 
Спасибо!  
Наслаждаюсь))))
 
Братцы, хочу, чтоб в ячейке отображался путь папки, в которой лежит данный файл.  
В формулах такого не нашёл, а в нете откапал нечто, вроде, похожее:  
 
iPath = ThisWorkbook.Path  
 
Но, куда и как это прикрутить - понятия не имею.  
Подскажите, пожалуйста, как в ячейке получить путь папки?
 
Так и получить:  
Sub ыыы()  
Sheets(ИмяЛиста).Cells(НомерСтроки, НомерСтолба) = ThisWorkbook.Path  
End sub
 
Вызываю диалог, пользователь выбрал файлы  
Dim FilesToOpen  
FilesToOpen = Application.GetOpenFilename _  
                 (FileFilter:="Microsoft Excel Files (*.rar), *.rar", _  
                  MultiSelect:=True, Title:="Files to Merge")  
 
FilesToOpen(1) ИМЯ первого файла в списке  
FilesToOpen(2) ИМЯ второго ...  
 
а теперь вопрос, как мне ПУТЬ узнать, где лежат ВЫБРАННЫЕ файлы, а только их имена знаю :(
 
Почему только имена ? Полный же путь получаем.
 
Выше был я.
 
{quote}{login=}{date=10.11.2011 08:14}{thema=}{post}Почему только имена ? Полный же путь получаем.{/post}{/quote}  
странно, теперь выдает полный путь, а до этого выдавал только имя файла.
Страницы: 1
Читают тему
Наверх