Jak uzyskać ścieżkę bieżącego arkusza roboczego w VBA?

141

Napisałem makro jako dodatek i muszę uzyskać ścieżkę do bieżącego arkusza roboczego, na którym jest wykonywany. Jak mam to zrobic? Jak uzyskać ścieżkę do pliku (tylko katalog)?

l --''''''--------- '' '' '' '' '' ''
źródło
czy masz na myśli to, że mając arkusz roboczy, chcesz poznać folder, w którym zapisany jest skoroszyt nadrzędny?
Mathias

Odpowiedzi:

264

Użyj Application.ActiveWorkbook.Pathtylko dla samej ścieżki (bez nazwy skoroszytu) lub Application.ActiveWorkbook.FullNamedla ścieżki z nazwą skoroszytu.

BradC
źródło
24
Activeworkbook zależy od tego, który skoroszyt jest aktywny. Skorzystaj z tej ścieżki do pracy
Alwyn Miranda
6
Oba są oczywiście przydatne w różnych sytuacjach. Przyjąłem pierwotne pytanie, aby oznaczało, że makro znajdowało się w skoroszycie dodatku (który byłby ThisWorkbook.path), ale wymagało uruchomienia kodu na innych skoroszytach zgodnie z potrzebami użytkownika (który byłby ActiveWorkbook.path).
BradC
2
Zawsze powinno być jawne - jeśli jest to ten skoroszyt, powinno to być application.thisworkbook.path. Jeśli jest to otwierany skoroszyt, nazwę należy zdefiniować za pomocą zestawu, a następnie application.Variablename.path (lub w zależności od pełnej ścieżki).
Selkie
@Selkie Jeśli sam kod otwiera skoroszyt, to jasne . Ale jeśli jest to po prostu makro pomocnicze, które znajduje się w skoroszycie dodatku i musi działać na dowolnym skoroszycie, który użytkownik jest aktualnie otwarty podczas wywoływania makra, to ActiveWorkbookjest to, co jest potrzebne.
BradC
3
Excel.ActiveWorkbook.Pathdziała tylko wtedy, gdy plik został zapisany co najmniej raz. Ponadto, jeśli plik nigdy nie został zapisany, Excel.ActiveWorkbook.FullNamezwraca tylko nazwę pliku. Dobrym pomysłem może być sprawdzenie, czy skoroszyt został kiedykolwiek zapisany .
ChrisB
37

Zawsze miło mieć:

Dim myPath As String     
Dim folderPath As String 

folderPath = Application.ActiveWorkbook.Path    
myPath = Application.ActiveWorkbook.FullName
Alex22
źródło
27

Jeśli chcesz uzyskać ścieżkę do skoroszytu, z którego wykonywane jest makro - użyj Application.ThisWorkbook.Path.
Application.ActiveWorkbook.Pathmoże czasami powodować nieoczekiwane wyniki (np. jeśli makro przełącza się między wieloma skoroszytami).

lawina 1
źródło
-1

Najszybszy sposób

path = ThisWorkbook.Path
Pablo Vilas
źródło