Как получить путь к текущему листу в VBA?

147

Я написал макрос как надстройку, и мне нужно получить путь к текущему листу, на котором он выполняется. Как мне это сделать? Как мне получить путь к файлу (только каталог)?

Алекс Гордон
источник
Вы имеете в виду, что, учитывая рабочий лист, вы хотите знать папку, в которой сохранена родительская книга?
Матиас

Ответы:

272

Используйте Application.ActiveWorkbook.Pathтолько для самого пути (без имени книги) или Application.ActiveWorkbook.FullNameдля пути с именем книги.

BradC
источник
25
Активная книга зависит от того, какая книга активна. Используйте Thisworkbook.path
Алвин Миранда
6
Оба, конечно, полезны в разных ситуациях. Я решил, что исходный вопрос означает, что макрос находится в книге надстройки (которая будет называться ThisWorkbook.path), но должен запускать код для других книг по мере необходимости пользователя (это будет ActiveWorkbook.path).
BradC 03
2
Всегда должно быть явным - если это эта книга, это должен быть application.thisworkbook.path. Если это открытая книга, имя должно быть определено с помощью набора, затем application.Variablename.path (или полного пути, в зависимости от того, что).
Selkie
@Selkie Если код сам открывает книгу, то обязательно. Но если это просто вспомогательный макрос, который находится в книге надстройки и должен работать с той книгой, которую пользователь в данный момент открывает при вызове макроса, то ActiveWorkbookэто то, что необходимо.
BradC
4
Excel.ActiveWorkbook.Pathработает только в том случае, если файл был сохранен хотя бы один раз. Кроме того, если файл никогда не сохранялся, Excel.ActiveWorkbook.FullNameвозвращается только имя файла. Возможно, стоит проверить, сохранялась ли когда-либо книга .
ChrisB
36

Всегда приятно иметь:

Dim myPath As String     
Dim folderPath As String 

folderPath = Application.ActiveWorkbook.Path    
myPath = Application.ActiveWorkbook.FullName
Alex22
источник
28

Если вы хотите получить путь к книге, из которой выполняется макрос - используйте Application.ThisWorkbook.Path.
Application.ActiveWorkbook.Pathможет иногда приводить к неожиданным результатам (например, если ваш макрос переключается между несколькими книгами).

лавина1
источник
-1

Самый быстрый способ

path = ThisWorkbook.Path
Пабло Вилас
источник