|
Jakaさん、どもっ。
「フォルダの選択」には悩んだことがありまして、補足させて頂きます。
'********************************************************************************
'<API使用>
'参考 http://support.microsoft.com/default.aspx?scid=kb;ja;179497
'APIを使ったもの、これが一番汎用性があるみたい
Option Explicit
Declare Function SHBrowseForFolder Lib "shell32.dll" _
Alias "SHBrowseForFolderA" _
(lpbi As BrowseInfo) As Long
Declare Function SHGetPathFromIDList Lib "shell32.dll" _
Alias "SHGetPathFromIDListA" _
(ByVal pidl As Long, _
ByVal pszPath As String) As Long
Declare Sub CoTaskMemFree Lib "OLE32.dll" (ByVal pv As Long)
Type BrowseInfo
hWndOwner As Long '親ウィンドウハンドル
pIDLRoot As Long 'ルートフォルダ(デスクトップは &H0)
pszDisplayName As String '選択したフォルダ
lpszTitle As String 'タイトル
ulFlags As Long '動作方法の指定(フォルダ選択は &H1)
lpfnCallback As Long
lParam As Long
iImage As Long
End Type
Sub f選択01()
Dim B_Info As BrowseInfo
Dim lpIDList As Long '戻り値
Dim SelectedF As String
With B_Info
.pIDLRoot = &H0 'デスクトップをルートに設定
.lpszTitle = "フォルダを選択してネ"
.ulFlags = &H1 'フォルダ選択限定
End With
lpIDList = SHBrowseForFolder(B_Info) '「フォルダ選択」ダイアログを表示
SelectedF = String$(256, vbNullChar) '受取領域確保
Call SHGetPathFromIDList(lpIDList, SelectedF) 'フォルダパス取得
CoTaskMemFree lpIDList 'メモリ解放
If lpIDList <> 0 Then
If Left(SelectedF, 1) = vbNullChar Then MsgBox "選択不可!!", 16: Exit Sub
SelectedF = Left(SelectedF, InStr(SelectedF, vbNullChar) - 1)
MsgBox SelectedF, 64, "選択されたフォルダ"
End If
End Sub
|
|