Расположение файла excel vba

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.

Jean-François Corbett's user avatar

asked Nov 6, 2013 at 22:26

Ullan's user avatar

1

When one opens an Excel document D:dbtmptest1.xlsm:

  • CurDir() returns C:Users[username]Documents

  • ActiveWorkbook.Path returns D: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:

  1. CurDir() => C:Users[username]Documents
  2. Application.CurrentProject.Path => D:dbtmp

Excel D:dbtmptest1.xlsm:

  1. CurDir() => C:Users[username]Documents
  2. ActiveWorkbook.Path => D:dbtmp
  3. Application.DefaultFilePath => C:Users[username]Documents

Outlook:

  1. CurDir() => C:WINDOWSSystem32
  2. Application.Session.Stores(1).Filepath => D:programdataOutlookmyOutlookDocX.pst

PowerPoint D:dbtmptest1.ppt:

  1. CurDir() => C:Users[username]Documents
  2. ActivePresentation.Path => D:dbtmp

Word D:dbtmptest1.docx:

  1. CurDir() => C:Users[username]Documents
  2. Application.ActiveDocument.Path => D:dbtmp
  3. Application.ActiveDocument.FullName => D:dbtmptest1.docx
  4. Application.StartupPath => C:users[username]appdataroamingmicrosoftwordstartup

answered Nov 6, 2013 at 22:47

jacouh's user avatar

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

AndASM's user avatar

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 Wild's user avatar

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

Mohamed Tahir's user avatar

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

Agus Sapurta Sijabat's user avatar

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 Function
  • Environ Function
  • Shell Function

answered Nov 18, 2018 at 7:55

ashleedawg's user avatar

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

NOTSermsak's user avatar

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's user avatar

Amit Verma

8,5408 gold badges34 silver badges40 bronze badges

answered Feb 9, 2021 at 10:46

mariuszm's user avatar

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

josef's user avatar

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's user avatar

ashleedawg

20k8 gold badges73 silver badges104 bronze badges

asked Apr 18, 2012 at 18:27

user1270123's user avatar

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 Williams's user avatar

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 Rout's user avatar

Siddharth RoutSiddharth Rout

146k17 gold badges206 silver badges250 bronze badges

Иногда вы можете открыть несколько книг одновременно, и вы можете забыть их расположение, и теперь я расскажу о методах получения активного местоположения / пути книги в Excel.

Получение местоположения книги с помощью формул

Получить расположение книги с помощью VBA

Получить местоположение книги с помощью Kutools for Excel хорошая идея3

Откройте содержащую папку с Kutools for Excelхорошая идея3


Получение местоположения книги с помощью формул

В 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 кнопку, затем появится диалоговое окно, в котором будет показан путь к книге.

документ получить расположение книги 1

Примечание: Если вы никогда раньше не сохраняли активную книгу, этот VBA выведет пустое диалоговое окно. Смотрите скриншот:

документ получить расположение книги 2

Если вы хотите показать расположение книги и имя книги, вы можете использовать ниже VBA:

VBA: Показать расположение книги и имя книги

Sub DisplayWorkbookFullName()

    MsgBox ActiveWorkbook.FullName, vbInformation, "Workbook Complete Path"

End Sub

Получить местоположение книги с помощью Kutools for Excel

Работы С Нами Kutools for ExcelАвтора Вставить информацию о книге вы можете получить расположение книги и затем вставить его в нужную ячейку.

После бесплатная установка Kutools for Excel, пожалуйста, сделайте следующее:

1. Выберите ячейку, в которую нужно вставить расположение книги, и нажмите Кутулс Плюс > Workbook > Вставить информацию о книге. Смотрите скриншот:

документ получить расположение книги 7

2. в Вставить информацию о книге диалоговом окне, отметьте параметр информации, который необходимо вставить в раздел информации, а затем вы также можете указать, чтобы вставить информацию в ячейку, верхний или нижний колонтитул в Вставить в .

документ вставить информацию из книги

3. Нажмите Ok. Теперь выбранная вами информация вставлена.

документ получить расположение книги 5

Примечание: Если активная книга никогда ранее не сохранялась, эта утилита вернет текст «Эта книга никогда не сохранялась».

Щелкните здесь, чтобы узнать больше о вставке информации из книги.


Откройте содержащую папку с Kutools for Excel

Если вы хотите открыть папку, содержащую текущую книгу, вы также можете применить Откройте папку содержащие of Kutools for Excel.

После бесплатная установка Kutools for Excel, пожалуйста, сделайте следующее:

Активируйте книгу, в которой хотите открыть папку, и нажмите Кутулс Плюс > Workbook > Откройте папку содержащие. Смотрите скриншот:

документ получить расположение книги 8

Затем открывается папка, содержащая активную книгу.


Лучшие инструменты для работы в офисе

Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%

  • Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
  • Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон
  • Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны
  • Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
  • Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
  • Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии
  • Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
  • Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF
  • Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.

вкладка kte 201905


Вкладка Office: интерфейс с вкладками в Office и упрощение работы

  • Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
  • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
  • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!

офисный дно

 

voice

Пользователь

Сообщений: 23
Регистрация: 24.06.2016

Доброго времени суток! У меня следующая проблема:

Есть файл, который копируется на разные ПК и, соответственно, запускается с разных мест. С этим же файлом в папке присутствует подпапка, содержащая файлы.
Пример:
D:WorkN100Excel.xls
D:WorkN100Data1
D:WorkN100Data2

В VBA у меня есть скрипт, который открывает эти файлы и копирует их содержимое в данный Excel. Но там конкретный путь, и при перемещении папки в другое место он работать не будет. Как сделать так, чтобы при изменении пути к файлу Excel данные копировались? Папка Data и файлы в ней всегда имеют постоянные имена. Наример:
F:JobN101Excel.xls
F:JobN101Data1
F:JobN101Data2

Надеюсь я изложить суть вопроса ясно…
Очень надеюсь на вашу помощь!

 

dmt.

Пользователь

Сообщений: 91
Регистрация: 23.06.2014

#2

07.12.2016 22:23:11

Добрый день!

Цитата
voice написал:
при перемещении папки в другое место он работать не будет.

Перемещение осуществляется вашим скриптом или уже пользователем?

 

voice

Пользователь

Сообщений: 23
Регистрация: 24.06.2016

Пользователем. То есть с этими данными работают люди на разных ПК с разными путями. И я хочу сделать кнопку, при нажатии которой данные будут копироваться независимо от пути. То есть, например, Excel определяет из какой папки он открыт и обращается уже к этой папке дальше. В данное случае к подпапке, но мне кажется, что это уже нюансы  

 

dmt.

Пользователь

Сообщений: 91
Регистрация: 23.06.2014

Единственное, что сразу приходит на ум, так это в файлы, которые копируются добавить макрос, который при открытии файла пользователем (независимо от того где находится данный файл) будет передавать путь в общий файл, но для этого пользователь должен давать согласие на запуск макросов при открытии файла. После того как вы будете нажимать кнопку ваш макрос уже будет проходить по путям переданным из ранее открытых файлов пользователями.

Изменено: dmt.07.12.2016 22:32:55

 

Ігор Гончаренко

Пользователь

Сообщений: 13746
Регистрация: 01.01.1970

#5

07.12.2016 22:33:30

Код
pth = thisworkbook.path & "data"
fLnm1 = pth & "01"
fLnm2 = pth & "02"

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

voice

Пользователь

Сообщений: 23
Регистрация: 24.06.2016

#6

07.12.2016 22:34:05

Цитата
dmt. написал:
Единственное, что сразу приходит на ум, так это в файлы, которые копируются добавить макрос…

Невозможно, так как файлы в подпапке не экселевские… Их приходится открывать через Excel, выбирать разделители и т.п.

Изменено: voice07.12.2016 22:41:31

 

voice

Пользователь

Сообщений: 23
Регистрация: 24.06.2016

Ігор Гончаренко, скажите, а если я сделаю таким образом:
ThisWorkbook.Path & «Data1»  ‘когда ссылаюсь уже к конкретному файлу
То моя задача решится? По-моему должна

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

#8

07.12.2016 22:55:12

Цитата
То моя задача решится? По-моему должна

Перед тем, как спросить, нужно попробовать, да?

Конкретный файл с именем 01? Нужно добавить расширение.

 

voice

Пользователь

Сообщений: 23
Регистрация: 24.06.2016

#9

07.12.2016 22:57:28

Цитата
vikttur написал:
Перед тем, как спросить, нужно попробовать, да?

Полностью согласен.
Спасибо всем

Содержание

  1. Объект FileSystemObject
  2. Синтаксис
  3. Примечания
  4. Методы
  5. Свойства
  6. См. также
  7. Поддержка и обратная связь
  8. Функция Dir
  9. Синтаксис
  10. Параметры
  11. Примечания
  12. См. также
  13. Поддержка и обратная связь
  14. Daily Dose of Excel
  15. Haphazardly Posted Excel Information and Other Stuff
  16. Get the Path to My Documents in VBA
  17. 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 “\” &

Источник

Понравилась статья? Поделить с друзьями:
  • Расположение текста колонками word
  • Расположение текста в таблице excel
  • Расположение текста в одной ячейки excel
  • Расположение таблиц в word
  • Расположение строки в таблице word