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
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