内容
Windowsが標準で持っているフォルダ選択のダイアログを表示し、ユーザが選択したフォルダのパスを取得する方法です。
解説
フォルダ選択のダイアログはWindows APIのSHBrowseForFolder( )を使って表示します。
サンプルは、フォーム上のボタンがクリックされたときに呼ばれることを想定しており、関数SelectFolder_FS( )の中でSHBrowseForFolder( )の引数の値を設定しSHBrowseForFolder(
)をコールしてフォルダのパスを取得しています。フォルダ選択のダイアログを表示する際、SelectFolder_FS(
)の2番目の引数で指定された文字列をフォルダ選択のダイアログ上に表示します。
サンプル
Option Compare Database
'Windows API用の定数の宣言
'---フォルダ選択用
Private Const BIF_RETURNONLYFSDIRS = 1
Private Const BIF_DONTGOBELOWDOMAIN = 2
'ユーザ定義型の宣言
Private Type BrowseInfo
hWndOwner As Long
pIDLRoot As Long
pszDisplayName As Long
lpszTitle As Long
ulFlags As Long
lpfnCallback As Long
lParam As Long
iImage As Long
End Type
'Windows API関数の宣言
Private Declare Function SHBrowseForFolder Lib "shell32" _
(lpbi As BrowseInfo) As Long
Private Declare Function SHGetPathFromIDList Lib "shell32" _
(ByVal pidList As Long, _
ByVal lpBuffer As String) As Long
Private Declare Function lstrcat Lib "kernel32" Alias "lstrcatA" _
(ByVal lpString1 As String, ByVal _
lpString2 As String) As Long
Public Function SelectFolder_FS(MyForm As Form, szTitle As String) As String
Dim lpIDList As Long
Dim sBuffer As String
Dim tBrowseInfo As BrowseInfo
On Error GoTo HandleErr
'szTitle = "フォルダを選択してください。"
With tBrowseInfo
.hWndOwner = MyForm.Hwnd
.lpszTitle = lstrcat(szTitle, "")
.ulFlags = BIF_RETURNONLYFSDIRS
End With
lpIDList = SHBrowseForFolder(tBrowseInfo)
If (lpIDList) Then
sBuffer = Space(MAX_PATH)
SHGetPathFromIDList lpIDList, sBuffer
sBuffer = Left(sBuffer, InStr(sBuffer, vbNullChar) - 1)
SelectFolder_FS = sBuffer
End If
ExitHere:
Exit Function
HandleErr:
Select Case Err.Number
Case Else
MsgBox "エラー " & Err.Number & ": " & Err.Description, vbCritical, "ConvMain.SelectFolder_FS" 'ErrorHandler:$$N=ComUtil.SelectFolder_FS
End Select
' エラー処理ブロックを終了します。
SelectFolder_FS = ""
Resume ExitHere:
End Function