I am using MS Excel 2010 and trying to get the current directory using the below code,
path = ActiveWorkbook.Path
But ActiveWorkbook.Path returns blank.
asked Nov 6, 2013 at 22:26
1
When one opens an Excel document D:dbtmptest1.xlsm
:
-
CurDir()
returnsC:Users[username]Documents
-
ActiveWorkbook.Path
returnsD:dbtmp
So CurDir()
has a system default and can be changed.
ActiveWorkbook.Path
does not change for the same saved Workbook.
For example, CurDir()
changes when you do «File/Save As» command, and select a random directory in the File/Directory selection dialog. Then click on Cancel to skip saving. But CurDir()
has already changed to the last selected directory.
[ADD]
Resume VBA for different applications
Access D:dbtmptest1.accdb, like duckboy81 commented:
- CurDir() => C:Users[username]Documents
- Application.CurrentProject.Path => D:dbtmp
Excel D:dbtmptest1.xlsm:
- CurDir() => C:Users[username]Documents
- ActiveWorkbook.Path => D:dbtmp
- Application.DefaultFilePath => C:Users[username]Documents
Outlook:
- CurDir() => C:WINDOWSSystem32
- Application.Session.Stores(1).Filepath => D:programdataOutlookmyOutlookDocX.pst
PowerPoint D:dbtmptest1.ppt:
- CurDir() => C:Users[username]Documents
- ActivePresentation.Path => D:dbtmp
Word D:dbtmptest1.docx:
- CurDir() => C:Users[username]Documents
- Application.ActiveDocument.Path => D:dbtmp
- Application.ActiveDocument.FullName => D:dbtmptest1.docx
- Application.StartupPath => C:users[username]appdataroamingmicrosoftwordstartup
answered Nov 6, 2013 at 22:47
jacouhjacouh
8,3275 gold badges30 silver badges43 bronze badges
3
You have several options depending on what you’re looking for.
Workbook.Path
returns the path of a saved workbook. Application.Path
returns the path to the Excel executable. CurDir
returns the current working path, this probably defaults to your My Documents folder or similar.
You can also use the windows scripting shell object’s .CurrentDirectory property.
Set wshell = CreateObject("WScript.Shell")
Debug.Print wshell.CurrentDirectory
But that should get the same result as just
Debug.Print CurDir
answered Nov 6, 2013 at 22:35
AndASMAndASM
9,0981 gold badge20 silver badges33 bronze badges
It would seem likely that the ActiveWorkbook has not been saved…
Try CurDir()
instead.
answered Nov 6, 2013 at 22:35
Monty WildMonty Wild
3,9311 gold badge21 silver badges35 bronze badges
1
Your code: path = ActiveWorkbook.Path
returns blank because you haven’t saved your workbook yet.
To overcome your problem, go back to the Excel sheet, save your sheet, and run your code again.
This time it will not show blank, but will show you the path where it is located (current folder)
I hope that helped.
answered Jun 12, 2016 at 15:09
Use Application.ActiveWorkbook.Path
for just the path itself (without the workbook name) or Application.ActiveWorkbook.FullName
for the path with the workbook name.
answered Nov 9, 2015 at 8:06
This is the VBA that I use to open the current path in an Explorer window:
Shell Environ("windir") & "explorer.exe """ & CurDir() & "",vbNormalFocus
Microsoft Documentation:
CurDir
FunctionEnviron
FunctionShell
Function
answered Nov 18, 2018 at 7:55
ashleedawgashleedawg
20k8 gold badges73 silver badges104 bronze badges
If you really mean pure working Directory, this should suit for you.
Solution A:
Dim ParentPath As String: ParentPath = ""
Dim ThisWorkbookPath As String
Dim ThisWorkbookPathParts, Part As Variant
Dim Count, Parts As Long
ThisWorkbookPath = ThisWorkbook.Path
ThisWorkbookPathParts = Split(ThisWorkbookPath, _
Application.PathSeparator)
Parts = UBound(ThisWorkbookPathParts)
Count = 0
For Each Part In ThisWorkbookPathParts
If Count > 0 Then
ParentPath = ParentPath & Part & ""
End If
Count = Count + 1
If Count = Parts Then Exit For
Next
MsgBox "File-Drive = " & ThisWorkbookPathParts _
(LBound(ThisWorkbookPathParts))
MsgBox "Parent-Path = " & ParentPath
But if don’t, this should be enough.
Solution B:
Dim ThisWorkbookPath As String
ThisWorkbookPath = ThisWorkbook.Path
MsgBox "Working-Directory = " & ThisWorkbookPath
answered Nov 27, 2018 at 4:45
NOTSermsakNOTSermsak
3561 gold badge8 silver badges8 bronze badges
Simple Example below:
Sub openPath()
Dim path As String
path = Application.ActivePresentation.path
Shell Environ("windir") & "explorer.exe """ & path & "", vbNormalFocus
End Sub
Amit Verma
8,5408 gold badges34 silver badges40 bronze badges
answered Feb 9, 2021 at 10:46
1
Use these codes and enjoy it.
Public Function GetDirectoryName(ByVal source As String) As String()
Dim fso, oFolder, oSubfolder, oFile, queue As Collection
Set fso = CreateObject("Scripting.FileSystemObject")
Set queue = New Collection
Dim source_file() As String
Dim i As Integer
queue.Add fso.GetFolder(source) 'obviously replace
Do While queue.Count > 0
Set oFolder = queue(1)
queue.Remove 1 'dequeue
'...insert any folder processing code here...
For Each oSubfolder In oFolder.SubFolders
queue.Add oSubfolder 'enqueue
Next oSubfolder
For Each oFile In oFolder.Files
'...insert any file processing code here...
'Debug.Print oFile
i = i + 1
ReDim Preserve source_file(i)
source_file(i) = oFile
Next oFile
Loop
GetDirectoryName = source_file
End Function
And here you can call function:
Sub test()
Dim s
For Each s In GetDirectoryName("C:New folder")
Debug.Print s
Next
End Sub
answered Dec 1, 2014 at 8:44
josefjosef
8449 silver badges8 bronze badges
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
Иногда вы можете открыть несколько книг одновременно, и вы можете забыть их расположение, и теперь я расскажу о методах получения активного местоположения / пути книги в Excel.
Получение местоположения книги с помощью формул
Получить расположение книги с помощью VBA
Получить местоположение книги с помощью Kutools for Excel
Откройте содержащую папку с Kutools for Excel
Получение местоположения книги с помощью формул
В Excel вы можете получить местоположение книги с помощью формулы.
Выберите ячейку, выберите одну из формул ниже и вставьте ее в ячейку и нажмите клавишу Enter, чтобы получить местоположение.
Чтобы получить местоположение книги
= ЛЕВЫЙ (ЯЧЕЙКА («имя файла»; A1); НАЙТИ («[«; ЯЧЕЙКА («имя файла»; A1)) — 1)
Чтобы получить расположение книги и имя книги
= ПОДСТАВИТЬ (ЛЕВЫЙ (ЯЧЕЙКА («имя файла»; A1); НАЙТИ («]», ЯЧЕЙКА («имя файла»; A1)) — 1), «[«, «»)
Чтобы получить расположение книги, имя книги и имя активного листа
= ЯЧЕЙКА («имя файла»; A1)
Ноты: Если вы никогда раньше не сохраняли активную книгу, первые две формулы вернут #VALUE! ошибок, а формула = ЯЧЕЙКА («имя файла», A1) вернет пустое значение.
Получить расположение книги с помощью VBA
Если вы хотите попытаться получить местоположение книги с помощью VBA, вы можете сделать следующее:
1. Включите книгу и нажмите Alt + F11 ключи для включения Microsoft Visual Basic для приложений окно, затем щелкните Вставить > Модули для отображения окна модуля.
2. Вставьте ниже код VBA в Модули окно.
VBA: Показать расположение книги
Sub DisplayWorkbookPath()
MsgBox ActiveWorkbook.Path, vbInformation, "Workbook Path"
End Sub
3. Нажмите Run кнопку, затем появится диалоговое окно, в котором будет показан путь к книге.
Примечание: Если вы никогда раньше не сохраняли активную книгу, этот VBA выведет пустое диалоговое окно. Смотрите скриншот:
Если вы хотите показать расположение книги и имя книги, вы можете использовать ниже VBA:
VBA: Показать расположение книги и имя книги
Sub DisplayWorkbookFullName()
MsgBox ActiveWorkbook.FullName, vbInformation, "Workbook Complete Path"
End Sub
Получить местоположение книги с помощью Kutools for Excel
Работы С Нами Kutools for ExcelАвтора Вставить информацию о книге вы можете получить расположение книги и затем вставить его в нужную ячейку.
После бесплатная установка Kutools for Excel, пожалуйста, сделайте следующее:
1. Выберите ячейку, в которую нужно вставить расположение книги, и нажмите Кутулс Плюс > Workbook > Вставить информацию о книге. Смотрите скриншот:
2. в Вставить информацию о книге диалоговом окне, отметьте параметр информации, который необходимо вставить в раздел информации, а затем вы также можете указать, чтобы вставить информацию в ячейку, верхний или нижний колонтитул в Вставить в .
3. Нажмите Ok. Теперь выбранная вами информация вставлена.
Примечание: Если активная книга никогда ранее не сохранялась, эта утилита вернет текст «Эта книга никогда не сохранялась».
Щелкните здесь, чтобы узнать больше о вставке информации из книги.
Откройте содержащую папку с Kutools for Excel
Если вы хотите открыть папку, содержащую текущую книгу, вы также можете применить Откройте папку содержащие of Kutools for Excel.
После бесплатная установка Kutools for Excel, пожалуйста, сделайте следующее:
Активируйте книгу, в которой хотите открыть папку, и нажмите Кутулс Плюс > Workbook > Откройте папку содержащие. Смотрите скриншот:
Затем открывается папка, содержащая активную книгу.
Лучшие инструменты для работы в офисе
Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%
- Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
- Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон…
- Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны…
- Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
- Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
- Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии…
- Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
- Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF…
- Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.
Вкладка Office: интерфейс с вкладками в Office и упрощение работы
- Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
- Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
- Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!
voice Пользователь Сообщений: 23 |
Доброго времени суток! У меня следующая проблема: Есть файл, который копируется на разные ПК и, соответственно, запускается с разных мест. С этим же файлом в папке присутствует подпапка, содержащая файлы. Надеюсь я изложить суть вопроса ясно… |
dmt. Пользователь Сообщений: 91 |
#2 07.12.2016 22:23:11 Добрый день!
Перемещение осуществляется вашим скриптом или уже пользователем? |
||
voice Пользователь Сообщений: 23 |
Пользователем. То есть с этими данными работают люди на разных ПК с разными путями. И я хочу сделать кнопку, при нажатии которой данные будут копироваться независимо от пути. То есть, например, Excel определяет из какой папки он открыт и обращается уже к этой папке дальше. В данное случае к подпапке, но мне кажется, что это уже нюансы |
dmt. Пользователь Сообщений: 91 |
Единственное, что сразу приходит на ум, так это в файлы, которые копируются добавить макрос, который при открытии файла пользователем (независимо от того где находится данный файл) будет передавать путь в общий файл, но для этого пользователь должен давать согласие на запуск макросов при открытии файла. После того как вы будете нажимать кнопку ваш макрос уже будет проходить по путям переданным из ранее открытых файлов пользователями. Изменено: dmt. — 07.12.2016 22:32:55 |
Ігор Гончаренко Пользователь Сообщений: 13746 |
#5 07.12.2016 22:33:30
Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете! |
||
voice Пользователь Сообщений: 23 |
#6 07.12.2016 22:34:05
Невозможно, так как файлы в подпапке не экселевские… Их приходится открывать через Excel, выбирать разделители и т.п. Изменено: voice — 07.12.2016 22:41:31 |
||
voice Пользователь Сообщений: 23 |
Ігор Гончаренко, скажите, а если я сделаю таким образом: |
vikttur Пользователь Сообщений: 47199 |
#8 07.12.2016 22:55:12
Перед тем, как спросить, нужно попробовать, да? Конкретный файл с именем 01? Нужно добавить расширение. |
||
voice Пользователь Сообщений: 23 |
#9 07.12.2016 22:57:28
Полностью согласен. |
||
Содержание
- Объект FileSystemObject
- Синтаксис
- Примечания
- Методы
- Свойства
- См. также
- Поддержка и обратная связь
- Функция Dir
- Синтаксис
- Параметры
- Примечания
- См. также
- Поддержка и обратная связь
- Daily Dose of Excel
- Haphazardly Posted Excel Information and Other Stuff
- Get the Path to My Documents in VBA
- 23 thoughts on “ Get the Path to My Documents in VBA ”
Объект FileSystemObject
Предоставляет доступ к файловой системе компьютера.
Синтаксис
Scripting.FileSystemObject
Примечания
Приведенный ниже код иллюстрирует использование объекта FileSystemObject для возврата объекта TextStream, который можно читать, и в который можно записать данные.
- Функция CreateObject возвращает объект FileSystemObject ( fs ).
- Метод CreateTextFile создает файл в качестве объекта TextStream ( a ).
- Метод WriteLine записывает строку текста в созданный текстовый файл.
- Метод Close опустошает буфер и закрывает файл.
Методы
Метод | Описание |
---|---|
BuildPath | Добавляет имя в существующий путь. |
CopyFile | Копирует один или несколько файлов из одного расположения в другое. |
CopyFolder | Копирует одну или несколько папок из одного расположения в другое. |
CreateFolder | Создает новую папку. |
CreateTextFile | Создает текстовый файл и возвращает объект TextStream, который можно использовать для чтения или записи в файл. |
DeleteFile | Удаляет один или несколько указанных файлов. |
DeleteFolder | Удаляет одну или несколько указанных папок. |
DriveExists | Проверяет, существует ли указанный диск. |
FileExists | Проверяет, существует ли указанный файл. |
FolderExists | Проверяет, существует ли указанная папка. |
GetAbsolutePathName | Возвращает полный путь из корневого каталога диска для указанного пути. |
GetBaseName | Возвращает базовое имя указанного файла или папки. |
GetDrive | Возвращает объект Drive, соответствующий диску в указанном пути. |
GetDriveName | Возвращает имя диска указанного пути. |
GetExtensionName | Возвращает имя расширения файла для последнего компонента в указанном пути. |
GetFile | Возвращает объект файла для указанного пути. |
GetFileName | Возвращает имя файла или папки для последнего компонента в указанном пути. |
GetFolder | Возвращает объект Folder для указанного пути. |
GetParentFolderName | Возвращает имя родительской папки последнего компонента в указанном пути. |
GetSpecialFolder | Возвращает путь к некоторым специальным папкам Windows. |
GetTempName | Возвращает созданный случайным образом временный файл или папку. |
Move | Перемещает заданный файл или указанную папку из одного места в другое. |
MoveFile | Перемещает один или несколько файлов из одного места в другое. |
MoveFolder | Перемещает одну или несколько папок из одного места в другое. |
OpenAsTextStream | Открывает указанный файл и возвращает объект TextStream, который можно использовать для считывания, записи и дополнения данных в файле. |
OpenTextFile | Открывает файл и возвращает объект TextStream, который можно использовать для доступа к файлу. |
WriteLine | Записывает заданную строку и символ новой строки в файл TextStream. |
Свойства
Свойство | Описание |
---|---|
Drives | Возвращает коллекцию всех объектов Drive на компьютере. |
Name | Устанавливает или возвращает имя указанного файла или заданной папки. |
Path | Возвращает путь для указанного файла, диска или указанной папки. |
Size | Для файлов возвращает размер указанного файла в байтах; для папок возвращает размер всех файлов и вложенных папок в байтах. |
Type | Возвращает сведения о типе файла или папки (например, для файлов с расширением .TXT возвращается «Text Document»). |
См. также
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Источник
Функция Dir
Возвращает значение типа String, определяющее имя файла, каталога или папки, которое соответствует указанному шаблону, атрибуту файла либо метке тома диска.
Синтаксис
Dir [ (pathname, [ attributes ] ) ]
Синтаксис функции Dir состоит из следующих элементов.
Часть | Описание |
---|---|
pathname | Необязательный. Строковое выражение, указывающее имя файла; может включать каталог или папку, а также диск. Если файл, указанный параметром pathname, не найден, возвращается строка нулевой длины («»). |
attributes | Необязательный. Константа или числовое выражение, определяющее атрибуты файла. Если этот параметр опущен, возвращаются файлы, которые соответствуют параметру pathname, но не имеют атрибутов. |
Параметры
Константа | Значение | Описание |
---|---|---|
vbNormal | 0 | (По умолчанию.) Определяет файлы без атрибутов. |
vbReadOnly | 1 | В дополнение к файлам без атрибутов определяет файлы, доступные только для чтения. |
vbHidden | 2 | Определяет скрытые файлы, а также файлы без атрибутов. |
vbSystem | 4 | В дополнение к файлам без атрибутов определяет системные файлы. Недоступно в macOS. |
vbVolume | 8 | Определяет метку тома; если указан какой-либо другой атрибут, параметр vbVolume игнорируется. Недоступно в macOS. |
vbDirectory | 16 | В дополнение к файлам без атрибутов определяет каталоги (папки). |
vbAlias | 64 | Указанное имя файла является псевдонимом. Доступно только в macOS. |
Эти константы определены в Visual Basic для приложений и могут использоваться в коде вместо фактических значений.
Примечания
В Microsoft Windows и macOS Dir поддерживает использование подстановочных знаков с несколькими символами (*) и одним символом (?) для указания нескольких файлов.
Так как macOS не поддерживает использование подстановочных знаков, для определения группы файлов используйте тип файла. Чтобы вместо имен файлов указать тип файла, воспользуйтесь функцией MacID. Например, следующий оператор возвращает имя первого текстового файла в текущей папке:
Чтобы вывести следующий файл в папке, укажите пустую строку:
Если функция MacID используется с функцией Dir в Microsoft Windows, возникает ошибка.
Любое значение атрибута, превышающее 256, считается значением MacID.
Значение pathname необходимо указать при первом вызове функции Dir, иначе произойдет ошибка. Если задаются атрибуты файла, значение pathname также должно быть указано.
Функция Dir возвращает первое имя файла, соответствующее значению pathname. Для получения дополнительных имен файлов, соответствующих значению pathname, вызовите функцию Dir повторно без аргументов. Если других соответствий найдено не будет, функция Dir возвратит пустую строку («»). После возврата строки нулевой длины в последующих вызовах необходимо указывать значение pathname, иначе произойдет ошибка.
Значение pathname можно изменить без получения всех имен файлов, соответствующих текущему значению pathname. Однако нельзя осуществить рекурсивный вызов функции Dir. С помощью функции Dir с атрибутом vbDirectory невозможно последовательно возвращать подкаталоги.
Так как имена файлов возвращаются в порядке без учета регистра для Windows и с учетом регистра для macOS, их можно сохранить в массиве и затем отсортировать массив.
См. также
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Источник
Daily Dose of Excel
Haphazardly Posted Excel Information and Other Stuff
Get the Path to My Documents in VBA
VBA has an Environ function. To get a list of all the Environ variables you can see, you can use the method at VBA Express. I use the USERPROFILE argument like this
You can also use the Windows API as described at My Documents + Environment Variables
23 thoughts on “ Get the Path to My Documents in VBA ”
One can also look up Excel VBA help for ‘environ’ (w/o the quotes) and get pretty exhaustive information including what I suspect is the “base” code for most examples one finds on various websites.
Your code gives an incorrect answer on my system. It returns “C:Documents and SettingsusernameMy Documents”, but that folder doesn’t exist on this computer. I have the “My Documents” folder on a different drive than the username folder. In fact, I don’t have a folder called “My Documents” anywhere. But, I can click on the “My Documents” folder that is on my desktop and it will show me the same files as if I navigated directly to “D:username”.
I did a quick search for an environment variable that would expose where this desktop folder actually points to, but I came up empty-handed.
Environ is okay for some directory lookups, but to get them all, reliably, you need to use Windows APIs:
Private Declare Function SHGetFolderPath Lib “shfolder.dll” _
Alias “SHGetFolderPathA” _
( ByVal hwndOwner As Long , _
ByVal nFolder As Long , _
ByVal hToken As Long , _
ByVal dwReserved As Long , _
ByVal lpszPath As String ) As Long
Function MyDocumentsDir()
Dim sBuffer As String
sBuffer = Space$(260)
If SHGetFolderPath(&H0, &H5, -1, &H0, sBuffer) = 0 Then
MyDocumentsDir = Left$(sBuffer, lstrlenW(StrPtr(sBuffer)))
End If
End Function
Another way using Wscript:
MsgBox objFolders( “desktop” )
MsgBox objFolders( “allusersdesktop” )
MsgBox objFolders( “sendto” )
MsgBox objFolders( “startmenu” )
MsgBox objFolders( “recent” )
MsgBox objFolders( “favorites” )
MsgBox objFolders( “mydocuments” )
End Function
I had the environ function in my notes for a rainy day, can’t remember why I Googled it in the first place. being in application support where I get to tinker with all sorts of software I’m always interested in finding the ‘joins’ between them. Usually knowing the strengths and capabilities of different scripting languages and software, plus where they can be joined to feed one into the next, gives me the sort of quick and dirty answers I need.
But Dick specifies it as Environ$, why the $? is it purely optional or does it have a modifying effect?
It’s a habit I developed based on that article.
Mike, your code using Wscript correctly identified where the “My Documents” folder on my desktop actually resides on my computer. I’m sure you knew it would! Thank you for that.
I’ve done a couple minor one-off type spreadsheets that relied on nobody doing what I did to my home computer. That’s not optimal and was bound to backfire on me some day. Now I can fix the code.
The other part I like about it is that I can actually read and follow the code. I know I could incorporate that into my projects without wondering why it worked.
Omar:
“I can actually read and follow the code..I know I could incorporate that into my projects without wondering why it worked.”
You know…it’s funny you say that. I recently spent some time gathering some code examples for a class I’m giving and I realized that I often lean toward variations of code that I can read and understand. I’m sure that leaves me doing some things “inefficiently”. But I’m willing to trade some inefficiency for something I can read and explain to others.
I remember Bill Jelen once told me that Aladin Akyurek (a poster on his site) creates the most amazing array formulas to solve most problems. He tells people that if they ever get a formula from Aladin, just copy and paste it into the cell. Don’t worry how it works…it will just work. I can, of course, appreciate the charm of that statement, but I know it would frustrate me on some level to have some formula I don’t fully understand working in my spreadsheet.
I guess I feel the same way about code.
Mike, my lesson is some code (found on the internet from a trustworthy source) that I’m using to add and remove file folders. This particular code won’t remove a folder with a hidden or system file in it. Which means most folders that have had a picture in it that has been viewed using Thumbnails. Since the purpose of these folders is to contain pictures, well you get the idea. I end up copying the list of folders that need removing to a DOS batch file and delete them that way.
Since I don’t understand the code, I don’t know how to modify it, or whether it is even possible to modify it.
I had no idea you could access Wscript from VBA. I will be looking into that possibility to do this task.
I agree with Jon the only reliable way to get the system folders is with the API. Environ can certainly fail (as in not return an expected result) in some systems and WScript might be disabled (it’s also slow while the object is created).
For readability use the conventionally named constants, eg
Const CSIDL_PERSONAL = &H5 ‘ my documents
(ignore any “amp;” that might creep in before the “H”)
Thanks to Mike (Alexander) .. in the environment I’m working in we have roaming profiles and the my documents folder is set to a network folder, yours was the only method that actually picked up the right address so thanks a lot for posting it!
[…] Forums http://www.thecodecage.com/forumz/excel-vba-programming/160189-file-path.html#post579392 Daily Dose of Excel » Blog Archive » Get the Path to My Documents in VBA and here Locating Home My Documents Folder – Excel Help & Excel Macro Help […]
To be sure, the code should probably look like the following (it’s missing an extra “\” &
Источник