フォルダ選択ダイアログ
使用頻度が高そうな関数を、ま、どこにでもありそうですが書いてみました。
パラメタ用の列挙型
用意しておくと、呼び出し側から指定ができて便利かも、と。
'シェル特殊フォルダ定数列挙 Public Enum ShellSpecialFolderConstants ssfALTSTARTUP = &H1D ssfAPPDATA = &H1A ssfBITBUCKET = &HA ssfCOMMONALTSTARTUP = &H1E ssfCOMMONAPPDATA = &H23 ssfCOMMONDESKTOPDIR = &H19 ssfCOMMONFAVORITES = &H1F ssfCOMMONPROGRAMS = &H17 ssfCOMMONSTARTMENU = &H16 ssfCOMMONSTARTUP = &H18 ssfCONTROLS = &H3 ssfCOOKIES = &H21 ssfDESKTOP = &H0 ssfDESKTOPDIRECTORY = &H10 ssfDRIVES = &H11 ssfFAVORITES = &H6 ssfFONTS = &H14 ssfHISTORY = &H22 ssfINTERNETCACHE = &H20 ssfLOCALAPPDATA = &H1C ssfMYPICTURES = &H27 ssfNETHOOD = &H13 ssfNETWORK = &H12 ssfPERSONAL = &H5 ssfPRINTERS = &H4 ssfPRINTHOOD = &H1B ssfPROFILE = &H28 ssfPROGRAMFILES = &H26 ssfPROGRAMFILESx86 = &H30 ssfPROGRAMS = &H2 ssfRECENT = &H8 ssfSENDTO = &H9 ssfSTARTMENU = &HB ssfSTARTUP = &H7 ssfSYSTEM = &H25 ssfSYSTEMx86 = &H29 ssfTEMPLATES = &H15 ssfWINDOWS = &H24 End Enum
それぞれの解説は、う〜ん。翻訳が面倒なので、MSDNサイトをご参考に、ってことで。
ShellSpecialFolderConstants Enumerated Type ()
関数本体
デフォルト引数で、初期選択フォルダをしていできます。上記の ShellSpecialFolderConstants 列挙型か、パス文字列のどちらでも指定可能です。
options も引数にしてよかったのですが、一旦やってみたのはいいものの、あまり需要がないかな・・・なんて思って固定にしちゃいました。選択されたフォルダのフルパス(未選択時は空文字)が返ります。
Public Function SelectFolder(Optional defaultPath = ShellSpecialFolderConstants.ssfDESKTOP) As String 'BrowseForFolderオプション Const BIF_EDITBOX = &H10 'ダイアログボックス内にアイテム名入力用のテキストボックスを追加する Const BIF_RETURNNONLYFSDIRS = &H1 'ディレクトリのみ選択可能 Dim options, objShell, objFolder Dim selectPath As String On Error GoTo ErrLbl options = BIF_RETURNNONLYFSDIRS + BIF_EDITBOX Set objShell = CreateObject("Shell.Application") selectPath = "" Set objFolder = objShell.BrowseForFolder(0, "フォルダを選択してください。", options, defaultPath) If Not objFolder Is Nothing Then selectPath = objFolder.Self.path End If Set objFolder = Nothing Set objShell = Nothing SelectFolder = selectPath Exit Function ErrLbl: SelectFolder = "" End Function
options に指定できる値は、こちらのサイトで解説されている BROWSEINFO構造体の ulFlags を参考にできるかな、と。
BROWSEINFO