Jedną z pięciu funkcji, których używam najczęściej jest ta, która pobiera pełną lokalizację pliku. Użytkownik zaznacza w okienku skoroszyt i ścieżka do pliku staje się wynikiem funkcji. Jest to rozwiązanie dużo bardziej elastyczne od stałej, w której zakodowana jest lokalizacja pliku.
Dwa podejścia do tematu
Jak wspomniałem w zajawce artykułu – istnieją dwa sposoby na pobranie lokalizacji pliku.
Albo korzystamy ze stałych przechowujących pełne ścieżki do plików, albo wyświetlamy okienko dialogowe z prośbą o wybór właściwego pliku na dysku.
Pierwsze podejście sprawdzi się w dwóch sytuacjach:
- Aplikacja jest rozbudowana. Jeżeli operujemy na wielu plikach to takim przypadku nikt rozsądny nie będzie za każdym razem wyświetlał okienka z prośbą o wskazanie właściwego pliku – byłoby to zbyt irytujące.
- Mamy pewność odnośnie ścieżki. Musimy mieć gwarancję, że plik będzie się znajdował zawsze w tej samej lokalizacji i jego nazwa również się nie zmieni.
Trzeba jednak pamiętać, że jest to rozwiązanie mniej elastyczne – wymaga, aby pliki znajdowały się w konkretnych lokalizacjach. Z drugiej strony – łatwo wprowadzić takie zmiany w kodzie. Stałe najlepiej przechowywać w osobnym module.
Okienko dialogowe
Drugie podejście jest bardziej elastyczne, ale przerywa makro – wymaga pewnej interakcji z użytkownikiem.
Są jednak sytuacje gdzie spisze się ono znacznie lepiej od zakodowanej stałej. Chodzi tu głównie o przypadki gdy ścieżka do pliku jest zmienna.
W jaki sposób pobrać pełną lokalizację pliku Excela? Najlepiej korzystając ze świetnego obiektu FileDialog, który daje o wiele większe możliwości od wbudowanej metody GetOpenFilename obiektu Application.
Przykład funkcji znajduje się poniżej.
Kod funkcji
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
Public Function sSciezkaDoPliku(ByVal sTytul As String, _ ByVal sPrzycisk As String) As String '// Funkcja wyświetla okienko dialogowe i zwraca pełną ścieżkę do pliku Dim sOkienko As String ' Pełna ścieżka do pliku lub pusty ciąg 1 With Application.FileDialog(msoFileDialogFilePicker) 'Wyczyść wszystkie filtry i dodaj nowy na pliki excelowe 2 With .Filters 3 .Clear 4 .Add "Skoroszyt programu Excel z obsługą makr", "*.xlsm", 1 5 .Add "Skoroszyt programu Excel", "*.xlsx", 2 6 .Add "Skoroszyt programu Excel 97-2003", "*.xls", 3 7 End With 8 .Title = sTytul ' Tytuł okienka 9 .ButtonName = sPrzycisk ' Etykieta na przycisku 10 .InitialFileName = ThisWorkbook.Path ' Wyświetl domyślnie katalog z plikiem 11 .AllowMultiSelect = False ' Pozwól na wybranie tylko jednego pliku 12 .Show ' Wyświetl 'Sprawdź czy użytkownik wybrał plik. Jeżeli tak, pobierz do zmiennej ścieżkę. 'Gdy nie dokonał wyboru, wtedy przypisz do zmiennej pusty ciąg. 13 If .SelectedItems.Count = 0 Then 14 sOkienko = "" 15 Else 16 sOkienko = .SelectedItems(1) 17 End If 'Przypisz do wyniku wartość zmiennej 18 sSciezkaDoPliku = sOkienko 19 End With End Function |