Say, I’m writing a VBA inside my excel file sample.xls. Now I want to get the full path of sample.xls in my VBA. How do I do it?
asked Dec 13, 2009 at 5:12
2
If you mean VBA, then you can use FullName, for example:
strFileFullName = ThisWorkbook.FullName
(updated as considered by the comments: the former used ActiveWorkbook.FullName could more likely be wrong, if other office files may be open(ed) and active. But in case you stored the macro in another file, as mentioned by user @user7296559 here, and really want the file name of the macro-using file, ActiveWorkbook could be the correct choice, if it is guaranteed to be active at execution time.)
answered Dec 13, 2009 at 9:57
FionnualaFionnuala
90.1k7 gold badges110 silver badges148 bronze badges
3
this is a simple alternative that gives all responses, Fullname, Path, filename.
Dim FilePath, FileOnly, PathOnly As String
FilePath = ThisWorkbook.FullName
FileOnly = ThisWorkbook.Name
PathOnly = Left(FilePath, Len(FilePath) - Len(FileOnly))
answered Mar 13, 2017 at 9:44
APWAPW
2913 silver badges3 bronze badges
1
strScriptFullname = WScript.ScriptFullName
strScriptPath = Left(strScriptFullname, InStrRev(strScriptFullname,""))
answered Dec 13, 2009 at 5:18
Mitch WheatMitch Wheat
294k43 gold badges465 silver badges540 bronze badges
1
If you need path only this is the most straightforward way:
PathOnly = ThisWorkbook.Path
lucascaro
15.9k3 gold badges37 silver badges47 bronze badges
answered Oct 27, 2018 at 5:39
LouisLouis
392 bronze badges
if you need path only without file name:
ActiveWorkbook.Path
it would return D:Folder
if you need file path with file name also:
ActiveWorkbook.FullName
it would return D:Foldersample.xls
if you need file name only:
ActiveWorkbook.Name
it would return sample.xls
so if you want combine file path and file name to get full directory don’t forget to add «» between. otherwise its simpler using .Path
Reeno
5,69911 gold badges39 silver badges50 bronze badges
answered Mar 17, 2021 at 4:17
ActiveWorkbook.FullName would be better I think, in case you have the VBA Macro stored in another Excel Workbook, but you want to get the details of the Excel you are editing, not where the Macro resides.
If they reside in the same file, then it does not matter, but if they are in different files, and you want the file where the Data is rather than where the Macro is, then ActiveWorkbook is the one to go for, because it deals with both scenarios.
Emil
7,20117 gold badges77 silver badges134 bronze badges
answered Dec 14, 2016 at 12:41
There is a universal way to get this:
Function FileName() As String
FileName = Mid(Application.Caption, 1, InStrRev(Application.Caption, "-") - 2)
End Function
answered May 15, 2018 at 16:46
1
|
Mojakhed 0 / 0 / 0 Регистрация: 23.10.2012 Сообщений: 13 |
||||||||
|
1 |
||||||||
Как получить путь к файлу и имя этого файла в переменные23.10.2012, 11:58. Показов 89772. Ответов 22 Метки нет (Все метки)
Добрый день, Задача проста, есть решение, но оно не изящное, хотелось бы оптимизировать код. Все делается в VBA Excel 2010. 1. Получаем Имя файла
2. Получаем Путь к файлу (код не мой, помог Гугл)
Заранее спасибо
0 |
|
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
23.10.2012, 11:58 |
|
22 |
|
Казанский 15136 / 6410 / 1730 Регистрация: 24.09.2011 Сообщений: 9,999 |
||||
|
23.10.2012, 12:17 |
2 |
|||
|
fName в первом коде — полный путь к файлу. Вы хотите разделить его на путь к папке и имя?
2 |
|
0 / 0 / 0 Регистрация: 23.10.2012 Сообщений: 13 |
|
|
23.10.2012, 15:18 [ТС] |
3 |
|
Благодарю, вопрос исчерпан.
0 |
|
Hugo121 6875 / 2807 / 533 Регистрация: 19.10.2012 Сообщений: 8,562 |
||||
|
23.10.2012, 17:30 |
4 |
|||
|
Так попробуйте в первом коде:
Получите «полный путь к этому файлу, а так же его имя в отдельные переменные».
0 |
|
0 / 0 / 0 Регистрация: 23.10.2012 Сообщений: 13 |
|
|
23.10.2012, 19:14 [ТС] |
5 |
|
To Hugo121 Наверное я не достаточно четко сформулировал задачу, в любом случае, Казанский помог с решением проблемы. Я получил что хотел. В следующий раз буду четко формулировать. Спасибо.
0 |
|
Hugo121 6875 / 2807 / 533 Регистрация: 19.10.2012 Сообщений: 8,562 |
||||
|
23.10.2012, 20:55 |
6 |
|||
|
Ну когда есть полный путь и имя — легко от полного пути отрезать на длину имени…
0 |
|
rattrapper foo(); 886 / 587 / 222 Регистрация: 03.07.2013 Сообщений: 1,549 Записей в блоге: 2 |
||||||||
|
09.07.2013, 16:29 |
7 |
|||||||
|
нужна помощь, у меня код не работает(exel’13)
Импорт модуля проекта из файла
у меня нужные модули находятся в том же месте, что и книга, но я никак не могу получить полный путь к книге программно!
Добавлено через 36 минут
никак не могу получить полный путь к книге программно как же все просто)
0 |
|
ExpressFX 2 / 2 / 0 Регистрация: 24.10.2015 Сообщений: 1 |
||||
|
24.01.2016, 18:54 |
8 |
|||
|
Пути к файлу и имя файла — просто как 2+2 !
Выйдет сообщение:
2 |
|
4 / 4 / 0 Регистрация: 29.06.2015 Сообщений: 17 |
|
|
29.01.2016, 13:41 |
9 |
|
ActiveWindow.Caption возвращает имя открытого окна, т.е. имя файла без расширения.
0 |
|
Казанский 15136 / 6410 / 1730 Регистрация: 24.09.2011 Сообщений: 9,999 |
||||
|
29.01.2016, 15:20 |
10 |
|||
|
Федоров, …если заголовок окна не поменяли
0 |
|
0 / 0 / 0 Регистрация: 07.09.2015 Сообщений: 4 |
|
|
18.03.2016, 14:08 |
11 |
|
доброго дня всем, подскажите, а как теперь получаемые ответы вывести в ячейку? и чтоб без диалогового окна? просто выбор файла, а результат в ячейке, а не в окне.
0 |
|
Hugo121 6875 / 2807 / 533 Регистрация: 19.10.2012 Сообщений: 8,562 |
||||
|
18.03.2016, 14:19 |
12 |
|||
|
Вместо Msgbox пишите
— получите вместо сообщения строку в ячейке.
1 |
|
0 / 0 / 0 Регистрация: 07.09.2015 Сообщений: 4 |
|
|
18.03.2016, 15:24 |
13 |
|
благодарю, то что надо Добавлено через 1 минуту
0 |
|
6875 / 2807 / 533 Регистрация: 19.10.2012 Сообщений: 8,562 |
|
|
18.03.2016, 16:12 |
14 |
|
Используете ДВССЫЛ()? Она не в всех формулах работает. Если всё равно используете макрос — так сразу и формируйте макросом полностью формулы, или вообще делайте всю работу макросом.
0 |
|
0 / 0 / 0 Регистрация: 07.09.2015 Сообщений: 4 |
|
|
21.03.2016, 07:20 |
15 |
|
ДВССЫЛ не успользую, а в макросах не силен совсем.
0 |
|
Hugo121 6875 / 2807 / 533 Регистрация: 19.10.2012 Сообщений: 8,562 |
||||||||
|
21.03.2016, 09:22 |
16 |
|||||||
|
Попробуйте после замены файла
или
0 |
|
0 / 0 / 0 Регистрация: 07.09.2015 Сообщений: 4 |
|
|
21.03.2016, 11:04 |
17 |
|
нет, не работает ни в теле первого макроса, ни с отдельной кнопки((
0 |
|
6875 / 2807 / 533 Регистрация: 19.10.2012 Сообщений: 8,562 |
|
|
21.03.2016, 11:30 |
18 |
|
Попробуйте так — копируете любой файл клиента под именем например шаблон.xls, настраиваете все нужные формулы на импорт из этого файла.
0 |
|
Ivan_Ivanovich 0 / 0 / 0 Регистрация: 01.02.2016 Сообщений: 29 |
||||||||
|
14.04.2016, 09:59 |
19 |
|||||||
|
Здравствуйте, а подскажите пожалуйста как сделать так, чтобы можно было просто выбирать файл через диалоговое окно, не указывая при этом путь к файлу и само название файла. Нужно, чтобы была возможность выбрать любой файл на компьютере .xlsx и далее с ним работать (импортировать из него).
А вот продолжение кода в форме, при помощи которого 100% идет выбор файла (только автоматически, по прописанному пути и файлу, а нужно, чтобы можно было любой файл выбрать, чтобы не был заранее прописан код для файла) и уже выполнялась работа с ним.
0 |
|
6875 / 2807 / 533 Регистрация: 19.10.2012 Сообщений: 8,562 |
|
|
14.04.2016, 10:04 |
20 |
|
Т.е. не пробовали то, что я предлагаю?
0 |
|
Jonych Пользователь Сообщений: 26 |
Приветствую. Изменено: Jonych — 13.01.2016 02:57:14 |
|
KL Пользователь Сообщений: 2186 |
Так? Прикрепленные файлы
|
|
Андрей VG Пользователь Сообщений: 11878 Excel 2016, 365 |
Доброе время суток |
|
Jonych Пользователь Сообщений: 26 |
Спасибо за решение. |
|
KL Пользователь Сообщений: 2186 |
Как показано в файле от Андрей VG |
|
KL Пользователь Сообщений: 2186 |
Можно еще так если хотите ссылаться на реальную ячейку в данном файле, чтобы динамически менять адрес: Изменено: KL — 01.03.2016 11:57:00 |
|
Jonych Пользователь Сообщений: 26 |
#7 14.01.2016 00:46:44
Хм. Только сейчас понял, что он выдает путь на …Desktop, хотя файл находится абсолютно в другой папке: C:UsersName1DropboxFolder
выдает C:UsersName1Desktop |
||||
|
KL Пользователь Сообщений: 2186 |
Формула =ЯЧЕЙКА(«filename») выдает путь именно к тому файлу, в котором используется и не ошибается |
|
Jonych Пользователь Сообщений: 26 |
Вроде всё проверил, что не так? |
|
KL Пользователь Сообщений: 2186 |
Все так, но ДВССЫЛ работает только с открытыми файлами |
|
Jonych Пользователь Сообщений: 26 |
Вот тут то вся и беда). Так как файл, который подбирает инфу из других файлов находится в дропбоксе, то путь постоянно меняется. + по завершению месяца переносится в отдельную папку. Использую ctrl+h и замену пути. Получается, автоматизировать данный процесс не получится. Изменено: Jonych — 14.01.2016 02:01:34 |
|
KL Пользователь Сообщений: 2186 |
|
|
Jonych Пользователь Сообщений: 26 |
Примерно понял, что делают эти функции и как работает, но у меня больше тысячи ячеек :P. Писать скрипт по каждой — неверный метод) |
|
KL Пользователь Сообщений: 2186 |
Ну тогда вариантов почти не остаётся. Если файл используется только вами и не предназначен для рассылки, то поинтересуйтесь надстройкой написанной Laurent Longre, в которой есть функция листа INDIRECT.EXT или надстройкой написанной Harlan Grove, где есть функция листа PULSE. Я их сам не пробовал, но когда-то рекомендовали как решение. Вполне возможно, что за давностью лет они и перестали работать в последних версиях Excel, но может имеет смысл попытать счастья. Удачи. добавлено: фунция PULSE, похоже, использует ADO, так что наверняка медленная. Изменено: KL — 15.01.2016 02:25:49 |
|
Jonych Пользователь Сообщений: 26 |
Ок. Спасибо вам большущее за помощь, буду пробовать |
|
Jonych Пользователь Сообщений: 26 |
#16 15.01.2016 02:43:12 Хотя, у меня только что появилась идея, как реализовать через VBA.
А так как путь у нас постоянный: =’C:DropboxFolder[03.xlsm]Текущий день’!$AJ$23, за исключением всего, что написано до символа «[«, то можно далее добавить замену символов до «[» на то, что получается в B1 во всех ячейках. Реализуемо? Изменено: Jonych — 15.01.2016 03:48:45 |
||
|
The_Prist Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
#17 15.01.2016 09:57:01
Кирилл, что-то меня терзают смутные сомнения…Если не указать второй аргумент(адрес ячейки), то функция вернет путь до активного на момент пересчета файла, а не путь до файла с функцией. Т.е. корректней будет так: Jonych, я так до конца и не понял, что Вам надо. Возможно, какой-нибудь вариант на макросах из моей статьи подойдет: Как получить данные из закрытой книги? Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||
|
KL Пользователь Сообщений: 2186 |
The_Prist, согласен |
|
Jonych Пользователь Сообщений: 26 |
Если все-таки решу вопрос, то отпишусь) спасибо за помощь!) |
|
Jonych Пользователь Сообщений: 26 |
Все-таки не получилось). Перейти на one-drive с динамическими путями (в зависимости от пользователя компа) не получится. Остается Dropbox со стационарным путем C:DropboxПапкафайлы.xlsx |
|
Jonych Пользователь Сообщений: 26 |
Накопал идею: http://forum.msexcel.ru/index.php?topic=1920.0 . Там много всего, но смысл в том, чтобы сделать кнопку «обновить данные», и по нажатию в невидимом режиме открывается 31 файл, данные обновляются, файлы закрываются. |
|
Hugo Пользователь Сообщений: 23257 |
#22 02.02.2016 15:00:58
и как же тогда «Реализация без VBA»? |
||
|
The_Prist Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
|
Jonych Пользователь Сообщений: 26 |
#24 02.02.2016 17:02:25
Если других вариантов нет, пробуем такой) |
||
|
Jonych Пользователь Сообщений: 26 |
#25 01.03.2016 01:03:30 Заказал за 300р на фрилансе скрипт. Прикладываю ниже:
|
||
|
vaspup88 Пользователь Сообщений: 54 |
#26 21.09.2019 15:26:34 Здравствуйте! Помогите, я знаю. вам это будет легко
как вывести пусть файла в определенную ячейку? Изменено: vaspup88 — 21.09.2019 16:07:05 |
||
|
Юрий М Модератор Сообщений: 60588 Контакты см. в профиле |
vaspup88, код следует оформлять соответствующим тегом: ищите такую кнопку (см. скрин) и исправьте своё сообщение. |
|
Юрий М Модератор Сообщений: 60588 Контакты см. в профиле |
#28 21.09.2019 15:51:07
|
||
|
vaspup88 Пользователь Сообщений: 54 |
#29 21.09.2019 16:07:50
сделал Изменено: vaspup88 — 21.09.2019 16:08:14 |
||
|
vaspup88 Пользователь Сообщений: 54 |
#30 21.09.2019 18:59:52 а как сократить весь путь до имени файла с расширением? причем с выводом в определенную ячейку Изменено: vaspup88 — 21.09.2019 20:29:43 |
- Список файлов
- Работа с файлами
Функции GetFileName и GetFilePath по сути аналогичны, и предназначены для вывода диалогового окна выбора файла
(при этом можно указать стартовую папку для поиска файла, и тип/расширение выбираемого файла)
Функция GetFilenamesCollection позволяет выборать сразу несколько файлов в одной папке.
Функция GetFolderPath работает также, только служит для вывода диалогового окна выбора папки.
Function GetFolderPath(Optional ByVal Title As String = "Выберите папку", _ Optional ByVal InitialPath As String = "c:") As String ' функция выводит диалоговое окно выбора папки с заголовком Title, ' начиная обзор диска с папки InitialPath ' возвращает полный путь к выбранной папке, или пустую строку в случае отказа от выбора Dim PS As String: PS = Application.PathSeparator With Application.FileDialog(msoFileDialogFolderPicker) If Not Right$(InitialPath, 1) = PS Then InitialPath = InitialPath & PS .ButtonName = "Выбрать": .Title = Title: .InitialFileName = InitialPath If .Show <> -1 Then Exit Function GetFolderPath = .SelectedItems(1) If Not Right$(GetFolderPath, 1) = PS Then GetFolderPath = GetFolderPath & PS End With End Function Sub ПримерИспользования_GetFolderPath() ПутьКПапке = GetFolderPath("Заголовок окна", ThisWorkbook.Path) ' запрашиваем имя папки If ПутьКПапке = "" Then Exit Sub ' выход, если пользователь отказался от выбора папки MsgBox "Выбрана папка: " & ПутьКПапке, vbInformation End Sub
Function GetFilePath(Optional ByVal Title As String = "Выберите файл для обработки", _ Optional ByVal InitialPath As String = "c:", _ Optional ByVal FilterDescription As String = "Книги Excel", _ Optional ByVal FilterExtention As String = "*.xls*") As String ' функция выводит диалоговое окно выбора файла с заголовком Title, ' начиная обзор диска с папки InitialPath ' возвращает полный путь к выбранному файлу, или пустую строку в случае отказа от выбора ' для фильтра можно указать описание и расширение выбираемых файлов On Error Resume Next With Application.FileDialog(msoFileDialogOpen) .ButtonName = "Выбрать": .Title = Title: .InitialFileName = InitialPath .Filters.Clear: .Filters.Add FilterDescription, FilterExtention If .Show <> -1 Then Exit Function GetFilePath = .SelectedItems(1): PS = Application.PathSeparator End With End Function Sub ПримерИспользования_GetFilePath() ИмяФайла = GetFilePath("Выберите файл Word", , "Документы Word", "*.doc") ' запрашиваем имя файла If ИмяФайла = "" Then Exit Sub ' выход, если пользователь отказался от выбора файла MsgBox "Выбран файл: " & ИмяФайла, vbInformation End Sub
Ниже представлены функции для вызова диалоговых окон выбора файлов и папок средствами VBA.
Функции GetFileName и GetFilePath по сути аналогичны, и предназначены для вывода диалогового окна выбора файла
(при этом можно указать стартовую папку для поиска файла, и типрасширение выбираемого файла)
Функция GetFilenamesCollection позволяет выборать сразу несколько файлов в одной папке.
Функция GetFolderPath работает аналогично, только служит для вывода диалогового окна выбора папки.
Function GetFileName(Optional ByVal Title As String = "Выберите файл для обработки", _ Optional ByVal InitialPath, _ Optional ByVal MyFilter As String = "Книги Excel (*.xls*),") As String ' функция выводит диалоговое окно выбора папки с заголовком Title, ' начиная обзор диска с папки InitialPath ' возвращает полный путь к выбранной папке, или пустую строку в случае отказа от выбора If Not IsMissing(InitialPath) Then On Error Resume Next: ChDrive Left(InitialPath, 1) ChDir InitialPath ' выбираем стартовую папку End If res = Application.GetOpenFilename(MyFilter, , Title, "Открыть") ' вывод диалогового окна GetFileName = IIf(VarType(res) = vbBoolean, "", res) ' пустая строка при отказе от выбора End Function Sub ПримерИспользования_GetFileName() ИмяФайла = GetFileName("Заголовок окна", ThisWorkbook.Path) ' запрашиваем имя файла ' ===================== другие варианты вызова функции ===================== ' текстовые файлы, стартовая папка не указана ' ИмяФайла = GetFileName("Выберите текстовый файл", , "Текстовые файлы (*.txt),") ' файлы любого типа из папки "C:Windows" ' ИмяФайла = GetFileName(, "C:Windows", "") ' ========================================================================== If ИмяФайла = "" Then Exit Sub ' выход, если пользователь отказался от выбора файла MsgBox "Выбран файл: " & ИмяФайла, vbInformation End Sub
Function GetFolderPath(Optional ByVal Title As String = "Выберите папку", _ Optional ByVal InitialPath As String = "c:") As String ' функция выводит диалоговое окно выбора папки с заголовком Title, ' начиная обзор диска с папки InitialPath ' возвращает полный путь к выбранной папке, или пустую строку в случае отказа от выбора Dim PS As String: PS = Application.PathSeparator With Application.FileDialog(msoFileDialogFolderPicker) If Not Right$(InitialPath, 1) = PS Then InitialPath = InitialPath & PS .ButtonName = "Выбрать": .Title = Title: .InitialFileName = InitialPath If .Show <> -1 Then Exit Function GetFolderPath = .SelectedItems(1) If Not Right$(GetFolderPath, 1) = PS Then GetFolderPath = GetFolderPath & PS End With End Function Sub ПримерИспользования_GetFolderPath() ПутьКПапке = GetFolderPath("Заголовок окна", ThisWorkbook.Path) ' запрашиваем имя папки ' ===================== другие варианты вызова функции ===================== ' стартовая папка не указана, заголовок окна по умолчанию ' ПутьКПапке = GetFolderPath ' обзор папок начинается с папки "Рабочий стол" ' СтартоваяПапка = CreateObject("WScript.Shell").SpecialFolders("Desktop") ' ПутьКПапке = GetFolderPath("Выберите папку на рабочем столе", СтартоваяПапка) ' ========================================================================== If ПутьКПапке = "" Then Exit Sub ' выход, если пользователь отказался от выбора папки MsgBox "Выбрана папка: " & ПутьКПапке, vbInformation End Sub
Function GetFilePath(Optional ByVal Title As String = "Выберите файл для обработки", _ Optional ByVal InitialPath As String = "c:", _ Optional ByVal FilterDescription As String = "Книги Excel", _ Optional ByVal FilterExtention As String = "*.xls*") As String ' функция выводит диалоговое окно выбора файла с заголовком Title, ' начиная обзор диска с папки InitialPath ' возвращает полный путь к выбранному файлу, или пустую строку в случае отказа от выбора ' для фильтра можно указать описание и расширение выбираемых файлов On Error Resume Next With Application.FileDialog(msoFileDialogOpen) .ButtonName = "Выбрать": .Title = Title: .InitialFileName = InitialPath .Filters.Clear: .Filters.Add FilterDescription, FilterExtention If .Show <> -1 Then Exit Function GetFilePath = .SelectedItems(1): PS = Application.PathSeparator End With End Function Sub ПримерИспользования_GetFilePath() ИмяФайла = GetFilePath("Выберите файл Word", , "Документы Word", "*.doc") ' запрашиваем имя файла ' ===================== другие варианты вызова функции ===================== ' текстовые файлы, стартовая папка не указана ' ИмяФайла = GetFilePath("Выберите текстовый файл", , "Текстовые файлы", "*.txt") ' файлы любого типа из папки "C:Windows" ' ИмяФайла = GetFilePath(, "C:Windows", , "*") ' ========================================================================== If ИмяФайла = "" Then Exit Sub ' выход, если пользователь отказался от выбора файла MsgBox "Выбран файл: " & ИмяФайла, vbInformation End Sub
Function GetFilenamesCollection(Optional ByVal Title As String = "Выберите файлы для обработки", _ Optional ByVal InitialPath As String = "c:") As FileDialogSelectedItems ' функция выводит диалоговое окно выбора нескольких файлов с заголовком Title, ' начиная обзор диска с папки InitialPath ' возвращает массив путей к выбранным файлам, или пустую строку в случае отказа от выбора With Application.FileDialog(3) ' msoFileDialogFilePicker .ButtonName = "Выбрать": .Title = Title: .InitialFileName = InitialPath If .Show <> -1 Then Exit Function Set GetFilenamesCollection = .SelectedItems End With End Function Sub ПримерИспользования_GetFilenamesCollection() Dim СписокФайлов As FileDialogSelectedItems Set СписокФайлов = GetFilenamesCollection("Заголовок окна", ThisWorkbook.Path) ' выводим окно выбора ' ===================== другие варианты вызова функции ===================== ' стартовая папка не указана, заголовок окна по умолчанию Set СписокФайлов = GetFilenamesCollection ' обзор файлов начинается с папки "Рабочий стол" СтартоваяПапка = CreateObject("WScript.Shell").SpecialFolders("Desktop") Set СписокФайлов = GetFilenamesCollection("Выберите файлы на рабочем столе", СтартоваяПапка) ' ========================================================================== If СписокФайлов Is Nothing Then Exit Sub ' выход, если пользователь отказался от выбора файлов For Each File In СписокФайлов Debug.Print File Next End Sub
Ещё один вариант кода (который я использую) для выбора файла
Его отличие — функция запоминает папку, из которой последний раз выбирался файл,
и при повторном запуске диалогового окна выбора файла,
обзор папок будет начат с той папки, откуда последний раз был взят файл.
Sub AttachFile_test() ' пример использования Filename$ = GetFilePath() If Filename$ = "" Then Exit Sub MsgBox "Выбран файл: " & Filename$ End Sub Function GetFilePath(Optional ByVal Title As String = "Выберите файл для обработки", _ Optional ByVal InitialPath As String = "c:", _ Optional ByVal FilterDescription As String = "Файлы счетов", _ Optional ByVal FilterExtention As String = "*.*") As String On Error Resume Next With Application.FileDialog(msoFileDialogOpen) .ButtonName = "Выбрать": .Title = Title: .InitialFileName = GetSetting(Application.Name, "GetFilePath", "folder", InitialPath) .Filters.Clear: .Filters.Add FilterDescription, FilterExtention If .Show <> -1 Then Exit Function GetFilePath = .SelectedItems(1) folder$ = Left(.SelectedItems(1), InStrRev(.SelectedItems(1), "")) SaveSetting Application.Name, "GetFilePath", "folder", folder$ End With End Function
- 214486 просмотров
Не получается применить макрос? Не удаётся изменить код под свои нужды?
Оформите заказ у нас на сайте, не забыв прикрепить примеры файлов, и описать, что и как должно работать.
I have a macro-enabled WorkBook. I need to specify the current folder in which the macro-enabled file is present as the path. I tried setting
path = ActiveWorkbook.Path
and
path = CurDir()
but neither of these work for me. Any idea on this?
ashleedawg
20k8 gold badges73 silver badges104 bronze badges
asked Apr 18, 2012 at 18:27
9
If the path you want is the one to the workbook running the macro, and that workbook has been saved, then
ThisWorkbook.Path
is what you would use.
answered Apr 18, 2012 at 19:04
Tim WilliamsTim Williams
150k8 gold badges96 silver badges124 bronze badges
0
I thought I had misunderstood but I was right. In this scenario, it will be ActiveWorkbook.Path
But the main issue was not here. The problem was with these 2 lines of code
strFile = Dir(strPath & "*.csv")
Which should have written as
strFile = Dir(strPath & "*.csv")
and
With .QueryTables.Add(Connection:="TEXT;" & strPath & strFile, _
Which should have written as
With .QueryTables.Add(Connection:="TEXT;" & strPath & "" & strFile, _
answered Apr 18, 2012 at 20:14
Siddharth RoutSiddharth Rout
146k17 gold badges206 silver badges250 bronze badges


