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)?
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.
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 .
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).
Odpowiedzi:
Użyj
Application.ActiveWorkbook.Path
tylko dla samej ścieżki (bez nazwy skoroszytu) lubApplication.ActiveWorkbook.FullName
dla ścieżki z nazwą skoroszytu.źródło
ActiveWorkbook
jest to, co jest potrzebne.Excel.ActiveWorkbook.Path
działa tylko wtedy, gdy plik został zapisany co najmniej raz. Ponadto, jeśli plik nigdy nie został zapisany,Excel.ActiveWorkbook.FullName
zwraca tylko nazwę pliku. Dobrym pomysłem może być sprawdzenie, czy skoroszyt został kiedykolwiek zapisany .Zawsze miło mieć:
źródło
Jeśli chcesz uzyskać ścieżkę do skoroszytu, z którego wykonywane jest makro - użyj
Application.ThisWorkbook.Path
.Application.ActiveWorkbook.Path
może czasami powodować nieoczekiwane wyniki (np. jeśli makro przełącza się między wieloma skoroszytami).źródło
Najszybszy sposób
źródło