Po co komu funkcja FileDialog?
Dlaczego zwróciłem uwagę na FileDialog? Pisząc makra często bywa tak, że nie wiem jaka będzie ścieżka dostępu do folderu, w którym znajdywać się będą przetwarzane pliki. To powodowało, że użytkownik musiał wpisać pełną ścieżkę do okienka InputBox, albo umieszczać plik z makrem w tym folderze. Odkryłem jednak metodę, która pozwala w przyjazny dla użytkownika sposób wskazać folder w oknie eksploratora. Działa podobnie jak GetOpenFileName w przypadku wyboru pliku.
Aby wyświetlić użytkownikowi okno wyboru folderu użyję własności Excela jaką jest FileDialog. FileDialog ma kilka zastosowań, ale skupię się na tym co chcę osiągnąć.
Na początek deklaruję dwie zmienne, z których jedna będzie zmienną obiektową typu FileDialog, a druga zmienną tekstową. Ta druga zmienna przechowa ścieżkę do folderu.
Teraz muszę wybrać konkretny rodzaj okna FileDialog czyli msoFileDialogFolderPicker.
Kolejnym krokiem jest wprowadzenie dodatkowych parametrów mojego obiektu FileDialog. Wykorzystując instrukcję With dodałem własną nazwę przycisku i ścieżkę startową. Z tego poziomu użytkownik zacznie szukać swojego folderu, a także tytuł okna. Polecenie Show służy już tylko do wyświetlenia okna dialogowego.
Jeśli użytkownik wybrał już folder mogę jego ścieżkę wzbogacić o dodatkowy backslash i przypisać do zmiennej.
Przenoszenie plików za pomocą pętli Do Loop i funkcji Name
Skoro mam już źródło danych to mógłbym wykorzystać je np. do tego, aby przenieść wszystkie pliki z wybranego folderu do stałej lokalizacji.
Jedną z metod jest wykorzystanie pętli Do Loop, oraz funkcji Dir, która w pętli będzie zwracać kolejne nazwy plików znajdujących się w folderze. Funkcja ta, kiedy wskazać jej ścieżkę jako parametr zwraca nazwę pierwszego w kolejności alfabetycznej pliku z folderu. Kiedy jednak ponownie użyję Dir bez wskazania ścieżki, otrzymam nazwę kolejnego pliku.
Wprowadzam dodatkową zmienną, która będzie przechowywać nazwy znalezionych plików.
Pętlę Do Loop ograniczam na początku sprawdzeniem, czy zawartość zmiennej nie jest pustym ciągiem znaków. To oznaczałoby, że nie ma już więcej plików do przenoszenia. W samej pętli najpierw przenoszę plik do wprowadzonej na sztywno ścieżki za pomocą polecenia Name. Kolejnym krokiem jest pobranie nazwy kolejnego pliku.
Jest też inna metoda na dostanie się do plików w folderze jako do kolekcji, ale o tym w innym wpisie.
Wersja wideo dostępna na YouTube: