Funkcja BrowseForFolderName_Shell   strona główna:
A po co ten Excel ;-)
 
Funkcja ta umożliwia nam pobranie nazwy folderu z/do którego chcemy coś wyciągnąć/zapisać.  
Np. Napisaliśmy narzędzie do importu danych. Jego zadaniem jest zczytywanie danych ze wszystkich plików xls z określonego katalogu. Jednak nie  
będzie to jakiś stały katalog lecz wskazany przez użytkownika. Jak zezwolić użytkownikowi na wskazanie katalogu w oknie dialogowym? Jedną z   
możliwości jest ustalenie ścieżki tego folderu poniższą funkcją.  
 
Function BrowseForFolderName_Shell(Optional vRootFolder As Variant) As String  
    Dim objShell As Object, objFolder As Object  
      
    Const BIF_NONEWFOLDERBUTTON = &H200  
 
    Set objShell = CreateObject("Shell.Application")  
    Set objFolder = objShell.BrowseForFolder(Hwnd:=0, _  
                                             Title:="Wskaż Folder", _  
                                             Options:=BIF_NONEWFOLDERBUTTON, _  
                                             RootFolder:=vRootFolder)  
    If Not objFolder Is Nothing Then  
        BrowseForFolderName_Shell = objFolder.Self.Path  
    End If  
    Set objFolder = Nothing  
    Set objShell = Nothing  
End Function  
 
A teraz szczegóły.  
    Funkcja korzysta z Metody BrowseForFolder obiektu Shell - Biblioteka Microsoft Shell Controls And Automation    Shell.BrowseForFolder Method
    Stała BIF_NONEWFOLDERBUTTON podana w parametrze Options metody decyduje o fakcie że na oknie dialogowym ni ma button'a "Utwórz nowy  
Folder". Zadaniem jest wskazanie folderu z plikami. Możliwość wskazanie folderu pustego jaką daje użytkownikowi okno dialogowe poprzez właśnie   
utworzenie nowego folderu jest w tej sytuacji zbędne. Oczywiście zadanie może być inne. Np. wskazać folder do zapisu jakiegoś pliku. Wtedy  
możliwość utworzenia nowego folderu w takim oknie jest jak najbardziej pożądane :-) Wtedy w param. Options można wpisać 0 (zero), ale są też inne  
stałe dostosowujące okno dialogowe do danego zadania.   ulFlags BROWSEINFO Structure
np.: Const BIF_EDITBOX = &H10 podanie takiej flagi powoduje że na oknie dialogowym pod listą folderów pojawia się okno z nazwą wskazywanego   
folderu. Opis dostępnych flag i ich opisy znajdziemy na msdm'ie. Trzeba tylko ustalić ją wartość danej fladze przypisać.  
Zapis: BIF_NONEWFOLDERBUTTON (0x00000200) oznacza liczbę w sys. szesnastkowym. W VB zapis ten można stosować w wersji &H200  
Żeby na oknie znalazł się EditBox ale nie było przycisku "Utwórz nowy Folder" w param. Options trzeba podać:  
options:=BIF_EDITBOX + BIF_NONEWFOLDERBUTTON  
    Dwa słowa o param. RootFolder. Parametr jest opcjonalny. Jeżeli zostanie pominięty lub wskazany pusty ciąg folderem najwyższego poziomu  
będzie pulpit użytkownika, ale z możliwością dostania się do wszystkich folderów poprzez 'Mój komputer'. Można w tym param. podać ścieżkę do  
folderu, który uznamy za folder najwyższego poziomu. Użytkownik nie będzie mógł wskazać folderu "nad" folderem wskazanym w RootFolder.  
Funkcja BrowseForFolderName_Shell posiada właśnie ten jeden opcjonalny parametr. Czemu zadeklarowany jako variant? Bo param. RootFolder może  
również przyjmować stałe zdefiniowane w numeratorze Shell32.ShellSpecialFolderConstants, ale o tym przy okazji innej funkcji.   ShellSpecialFolderConstants
Enumeration