W czasie prowadzonych szkoleń z podstaw VBA dla MS Excel prezentuję jedną z podstawowych technik wyboru folderu z wykorzystaniem wbudowanego okna FileDialogs. Szybko może przypomnę tą technikę w trzech krokach:
1. kod VBA
3 | Set A = Application.FileDialog(msoFileDialogFolderPicker) |
5 | Debug.Print A.SelectedItems(1) |
2. którego efektem dziania jest następujące okno wyświetlane użytkownikowi
3. w efekcie wybrania przez użytkownika określonego folderu zwracany jest wynik w postaci ścieżki do tego folderu:
Alternatywne rozwiązanie opiera się o wykorzystanie zewnętrznej biblioteki Shell. W wyniku wywołania odpowiednich funkcji wybór folderu odbywa się w oparciu o inne okno, bardziej znane ze środowiska Windows niż samego pakietu Office.
W jaki sposób wygląda kod do tego typu okna. Ponieważ naszym celem jest uzyskanie informacji o wskazanej przez użytkownika ścieżce dlatego też samo rozwiązanie ukrywamy najczęściej w funkcji VBA a nie procedurze. Oto przykładowa funkcja wyświetlająca powyższe okno:
01 | Function GetFolderPath( Optional OpenAt As Variant ) As Variant |
03 | Dim ShellLib As Object |
04 | Set ShellLib = CreateObject( "Shell.Application" ). _ |
05 | BrowseForFolder(0, "Proszę wskazać folder!" , 0, OpenAt) |
08 | BrowseForFolder = ShellLib.self.Path |
11 | Set ShellLib = Nothing |
Powyższa funkcja nie jest mojego autorstwa lecz uwzględnia moje modyfikacje i uproszczenia. Wiele wariantów tego rozwiązania można odnaleźć w sieci. Stosuję jednak to rozwiązanie o wiele chętniej niż wariant standardowo wbudowany w środowisko VBA prezentowany na początku niniejszego postu.
Pozostała jeszcze kwestia wywołania tej funkcji. W tym celu wystarczy nam poniższy fragment kodu:
1 | Dim JakiFolder As String |
4 | zostanie wskazany przy otwarciu okna |
5 | JakiFolder = GetFolderPath("C:\") |
Sam wynik, jak łatwo się domyślić, będzie identyczny jak w pierwszym przypadku:
Brak komentarzy:
Prześlij komentarz