Я написал макрос как надстройку, и мне нужно получить путь к текущему листу, на котором он выполняется. Как мне это сделать? Как мне получить путь к файлу (только каталог)?
Активная книга зависит от того, какая книга активна. Используйте 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возвращается только имя файла. Возможно, стоит проверить, сохранялась ли когда-либо книга .
Если вы хотите получить путь к книге, из которой выполняется макрос - используйте Application.ThisWorkbook.Path. Application.ActiveWorkbook.Pathможет иногда приводить к неожиданным результатам (например, если ваш макрос переключается между несколькими книгами).
Ответы:
Используйте
Application.ActiveWorkbook.Path
только для самого пути (без имени книги) илиApplication.ActiveWorkbook.FullName
для пути с именем книги.источник
ActiveWorkbook
это то, что необходимо.Excel.ActiveWorkbook.Path
работает только в том случае, если файл был сохранен хотя бы один раз. Кроме того, если файл никогда не сохранялся,Excel.ActiveWorkbook.FullName
возвращается только имя файла. Возможно, стоит проверить, сохранялась ли когда-либо книга .Всегда приятно иметь:
Dim myPath As String Dim folderPath As String folderPath = Application.ActiveWorkbook.Path myPath = Application.ActiveWorkbook.FullName
источник
Если вы хотите получить путь к книге, из которой выполняется макрос - используйте
Application.ThisWorkbook.Path
.Application.ActiveWorkbook.Path
может иногда приводить к неожиданным результатам (например, если ваш макрос переключается между несколькими книгами).источник
Самый быстрый способ
источник