フォルダ選択ダイアログ!!


Option Explicit

'===========================================================================
'    ファイル名    : basSelFolderDialog.bas
'    ファイル説明  : フォルダ選択ダイアログ表示
'    作成者        : Uz
'                    E-Mail   : uz@violet.plala.or.jp
'                    HomePage : http://www1.plala.or.jp/uz/
'    作成日        : 1998/09/12 (Sat)
'    修正日        : 1998/09/12 (Sat)
'    備考          : なし
'===========================================================================

' -- API 定数宣言
Private Const BIF_RETURNONLYFSDIRS = &H1&

' -- API 型宣言
Private 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

' -- API 関数宣言
Private Declare Function SHBrowseForFolder Lib "shell32.dll" Alias "SHBrowseForFolderA" ( _
    lpBROWSEINFO As BROWSEINFO _
) As Long

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

'///////////////////////////////////////////////////////////////////////////
'      関数名    : SelFolderDialog
'      目的説明  : フォルダ選択ダイアログの表示
'      前提条件  : なし
'      結果      : なし
'      引数      : frmForm  Form    : オーナーフォーム
'                  strTitle String  : タイトル (初期値 = "フォルダを選択してください")
'      戻り値    : String   : 選択したフォルダのパス
'      備考      : なし
'///////////////////////////////////////////////////////////////////////////
Public Function SelFolderDialog(frmForm As Form, Optional strTitle As String = "フォルダを選択してください") As String
    Dim lngRet As Long
    Dim BInfo As BROWSEINFO
    Dim SelectPath As String * 128
    
    With BInfo
        .hwndOwner = frmForm.hwnd
        .lpszTitle = strTitle
        .ulFlags = BIF_RETURNONLYFSDIRS
    End With
    
    lngRet = SHBrowseForFolder(BInfo)
    
    lngRet = SHGetPathFromIDList(lngRet, SelectPath)
    SelFolderDialog = SelectPath
End Function

'///////////////////////////////////////////////////
' 呼び出し側
    strPath = SelFolderDialog(Me)