Microsoft Excel VBA - フォルダ参照ダイアログボックスを使用する方法

◆概要

このページは、Excel VBAでフォルダ参照ダイアログボックスを使用する方法について記載しています。

Public Sub GetFolder()

    ' 「フォルダ参照」ダイアログボックスを利用して、フォルダを特定する。
    Dim folderName As Variant
    Set folderName = CreateObject("Shell.Application") _
        .BrowseForFolder( _
                    &O0 _
                    , "フォルダを選択してください。" _
                    , &H1 + &H10 _
                    , "DeskTop")
                    
    ' フォルダが選択されたか否か判別する。
    If folderName Is Nothing Then
        MsgBox "中止します。"
        Exit Sub
    End If
    
    MsgBox "選択されたフォルダ名は、「" & folderName & "」です。", _
        vbOKOnly + vbInformation, "フォルダ参照結果"
    
    ' オブジェクトを破棄する
    Set folderName = Nothing
    
End Sub

Cドライブのルートを既定のフォルダにしたいときには、CreateObjectメソッドの最後で「DeskTop」の代わりに、「C:\」を指定します。

上記の最後のステートメントでオブジェクトを破棄しています。これは、CreateObject関数で作成したオブジェクトへの参照は、参照終了後解放しなければならないためです。オブジェクトの参照を解放するには、オブジェクト型変数にNothingを代入します。


▼ページトップへ

◆関数化して利用
 次のように、関数化して利用することもできます。

Function FolderPath() As String
    
    Dim Shell As Object
    
    Set Shell = CreateObject("Shell.Application").BrowseForFolder( _
        0 _
        , "フォルダを選択してください" _
        , 0 _
        , "DeskTop")
    
    If Shell Is Nothing Then
        FolderPath = ""
    Else
        FolderPath = Shell.Items.Item.Path
    End If
    
    ' オブジェクトを破棄する
    Set Shell = Nothing

End Function

この関数を利用するときには、呼び出し元のプロシージャで次のようにして呼び出します。

Sub test()
    Dim FolderSpec As String
    ' フォルダ参照ダイアログボックスを表示
    FolderSpec = FolderPath
    
    If FolderSpec = "" Then
        Exit Sub
    Else
        MsgBox "選択されたフォルダ名は、「" & FolderSpec & "」です。" _
        , vbOKOnly + vbInformation _
        , "フォルダ参照結果"
    End If
End Sub

▼ページトップへ