■ SHBrowseForFolder

フォルダを選択させるフォルダ一覧のダイアログを表示します
コールバック関数を作成することにより、初期フォルダの指定も可能です
選択されたフォルダはLong型のIDで返されるので、SHGetPathFromIDList を使用して
ID値をパス名に変換する必要があります
単純にフォルダ名だけを取得したい場合には、 pszDisplayName を参照すればOKです
この項目を参照する場合には、予めNULLで初期化しておく必要があります
使用後には、CoTaskMemFree を使用して、タスクのメモリブロックを解放します
変換後のパス名格納バッファは少なくとも260バイト以上にします

Const CSIDL_DESKTOP = &H0         ' デスクトップ
Const BIF_RETURNONLYFSDIRS = &H1
Const BIF_DONTGOBELOWDOMAIN = &H2
Const MAX_PATH = 260

Type BROWSEINFO
   hwndOwner       As Long     ' 呼び出し元ウインドウハンドル
   pidlRoot        As Long     ' 表示上のルートフォルダの位置
   pszDisplayName  As String   ' 選択されたフォルダ名
   lpszTitle       As String   ' ダイアログに表示する文字列
   ulFlags         As Long     ' ダイアログのオプションフラグ
   lpfn            As Long     ' コールバック関数のアドレス
   lParam          As Long     ' コールバック関数へ渡すパラメータ
   iImage          As Long
End Type

Declare Function SHBrowseForFolder Lib "shell32.dll" Alias _
        "SHBrowseForFolderA" (lpBROWSEINFO As BROWSEINFO) As Long

Declare Function SHGetPathFromIDList Lib "shell32.dll" _
        Alias "SHGetPathFromIDListA" (ByVal pidl As Long, _
        ByVal pszPath As String) As Long

Dim w_ret             As Long               ' 戻り値
Dim w_tbrowseinfo     As BrowseInfo         ' フォルダダイアログ構造体
Dim w_buff            As String * MAX_PATH  ' パス名格納バッファ

    ' 呼び出し元ウインドウハンドルを設定
    w_tbrowseinfo.hWndOwner = Form1.hwnd
    ' デスクトップをルートに指定
    w_tbrowseinfo.pIDLRoot = CSIDL_DESKTOP
    ' ダイアログボックスの表示文字を設定
    w_tbrowseinfo.lpszTitle = "フォルダを選択してください"
    ' ダイアログボックスのオプションを設定
    w_tbrowseinfo.ulFlags = BIF_RETURNONLYFSDIRS + BIF_DONTGOBELOWDOMAIN
    ' ダイアログを表示する
    w_ret = SHBrowseForFolder(w_tbrowseinfo)
    ' フォルダが選択された場合
    If w_ret <> 0 Then
        ' パス名格納バッファを初期化
        w_buff = String$(MAX_PATH, vbNullChar)
        ' 返却されたID値をパス名に変換する
        w_ret = SHGetPathFromIDList(w_ret, w_buff)
    End If
1.表示上のルートフォルダの位置 

定数内容
CSIDL_DESKTOP&H0デスクトップ
CSIDL_PROGRAMS&H2スタートメニューの「プログラム」
CSIDL_CONTROLS&H3コントロールパネル
CSIDL_PRINTERS&H4プリンタ
CSIDL_PERSONAL&H5パーソナル
CSIDL_FAVORITES&H6「お気に入り」フォルダ
CSIDL_STARTUP&H7「スタートアップ」フォルダ
CSIDL_RECENT&H8スタートメニューの「最近使ったファイル」
CSIDL_SENDTO&H9送る
CSIDL_BITBUCKET&HAごみ箱
CSIDL_STARTMENU&HBスタートメニュー
CSIDL_DESKTOPDIRECTORY&H10デスクトップ
CSIDL_DRIVES&H11マイコンピュータ
CSIDL_NETWORK&H12ネットワークコンピュータ
CSIDL_NETHOO&H13 
CSIDL_FONTS&H14フォント
CSIDL_TEMPLATES&H15Shell New

2.ダイアログのオプションフラグ 

定数内容
BIF_RETURNONLYFSDIRS&H1コントロールパネル、プリンタ、ブリーフケース内は選択不可
BIF_DONTGOBELOWDOMAIN &H2ネットワークコンピュータ内のリソースを非表示
BIF_STATUSTEXT&H4テキスト文字列を表示(設定はコールバック関数で行なう)
BIF_RETURNFSANCESTORS&H8ネットワークコンピュータ内のリソースのみ選択可
BIF_EDITBOX&H10フォルダ名を編集するテキストBoxを表示
BIF_VALIDATE&H20 
BIF_USENEWUI&H40(Winodws2000のみ有効)
BIF_BROWSEFORCOMPUTER&H1000ネットワークコンピュータ内のリソースのみ選択可
BIF_BROWSEFORPRINTER&H2000ネットワークプリンタのみ選択可
BIF_BROWSEINCLUDEFILES&H4000フォルダ内のファイル名も表示(Windows98以降)