Excel VBA:FileDialogを使用してフォルダのみ選択できる[参照]ダイアログボックスを表示するサンプルプログラム

FileDialogを使用してGetOpenFilenameではできない、フォルダのみ選択できる[参照]ダイアログボックスを表示して選択されたフォルダのパスを取得するサンプルプログラムを覚え書き。

[参照]ダイアログボックスの初期フォルダを指定した上で表示する方法についても紹介しています。

ExcelのVBAでGetOpenFilenameを使用して[ファイルを開く]ダイアログボックスを表示して選択されたファイル名を取得することはできるけど、例えばファイルまでの選択は必要なくてフォルダのみ選択させたい場合には、GetOpenFilenameではできない。

使われるダイアログボックス自体が別物になるので当たり前ではあるんだけれど。

スポンサーリンク

FileDialogオブジェクトを使用した[参照]ダイアログボックスを表示するサンプルプログラムの動作前提条件

後述するExcelのVBAのサンプルプログラムの動作確認は、Excel 2013で行っています。

また、FileDialogオブジェクトを使用する際には必ず[参照設定]で以下のオブジェクトライブラリの参照を有効にしておく必要があります。

参照を有効化するオブジェクトライブラリ

Microsoft Office 15.0 Object Library

※15.0というバージョンは、Excelのバージョンによって異なります。

オブジェクトライブラリの参照手順

以下に「Microsoft Office 15.0 Object Library」の参照手順を記載します。

  1. Excelのリボンツールバーの[開発]タブをクリックする。
  2. [開発]タブの左端にある[Visual Basic]をクリックする。
  3. [Microsoft Visual Basic for Applications]画面(VBAエディタ)が開くので[ツール]メニューの[参照設定]をクリックする。
  4. [参照可能なライブラリ ファイル]の一覧(五十音順に並んでいます)から「Microsoft Office 15.0 Object Library」のチェックをオンにして[OK]をクリックする。

Microsoft Office 15.0 Object Library

[参照]ダイアログボックスの表示

[参照]ダイアログボックスは、以下のようにフォルダのみユーザーが選択できるダイアログボックスです。

フォルダだけを指定できる[参照]ダイアログボックス

[参照]ダイアログボックスをExcelのVBAで表示するには、FileDialogプロパティを使用します。

FileDialogプロパティは、指定するオプション次第で[ファイルを開く]ダイアログボックスや[名前をつけて保存]ダイアログボックスとして表示することもできます。

FileDialogプロパティを使用して[参照]ダイアログボックスを表示するサンプルプログラム

まずは簡単な[参照]ダイアログボックスの表示サンプルプログラムを以下に紹介します。

[参照]ダイアログボックスを表示し、選択されたフォルダをメッセージボックスで表示するサンプルプログラムです。

Sub FolderPicker_Sample01()
Dim dlg As Object, blAns As Boolean
Set dlg = Application.FileDialog(msoFileDialogFolderPicker)
    blAns = dlg.Show
    MsgBox "選択されたフォルダは、「" & dlg.SelectedItems(1) & "」です。"
End Sub

[キャンセル]ボタンが押された時の処理を追加したサンプルプログラム

上記のサンプルプログラムだと[参照]ダイアログボックスで[キャンセル]ボタンが押された場合、エラーとなってしまうので、[キャンセル]ボタンが押された時の処理を追加します。

Sub FolderPicker_Sample02()
Dim dlg As Object, blAns As Boolean
Set dlg = Application.FileDialog(msoFileDialogFolderPicker)
    blAns = dlg.Show
        If blAns Then
            MsgBox "選択されたフォルダは、「" & dlg.SelectedItems(1) & "」です。"
        Else
            MsgBox "フォルダ選択がキャンセルされました。"
        End If
        
End Sub

FileDialogプロパティを使用して[参照]ダイアログボックスを表示する際の初期フォルダを指定して表示するサンプルプログラム

[参照]ダイアログボックスを開く際にあらかじめ指定したフォルダを初期フォルダとして選択された状態で表示するサンプルプログラムです。

初期フォルダの指定は、"InitialFileName"に初期フォルダとして選択させたいフォルダのパスを指定します。

初期フォルダを指定して[参照]ダイアログボックスを開くサンプルプログラム

Sub FolderPicker_Sample03()
Dim dlg As Object, blAns As Boolean
Set dlg = Application.FileDialog(msoFileDialogFolderPicker)
    
    '初期フォルダの指定
    dlg.InitialFileName = "C:¥windows¥"
    blAns = dlg.Show
        If blAns Then
            MsgBox "選択されたフォルダは、「" & dlg.SelectedItems(1) & "」です。"
        Else
            MsgBox "フォルダ選択がキャンセルされました。"
        End If
        
End Sub

FileDialogプロパティを使用して[お気に入り]フォルダなど特殊なフォルダを初期フォルダとして選択させた状態で表示するサンプルプログラム

[参照]ダイアログボックスの初期フォルダとして[お気に入り]フォルダや[デスクトップ]フォルダを初期フォルダとして指定したい場合のサンプルプログラムです。

[お気に入り]フォルダや[デスクトップ]フォルダは、ログインするユーザーごとにパスが変わるため、プログラム内でパスを固定で指定することができません。

これらの特殊なフォルダのパスを初期フォルダとして指定したい場合は、"Windows Script Host"オブジェクトを使用してパスを取得します。

Sub FolderPicker_Sample04()
Dim dlg As Object, blAns As Boolean
Dim wScriptHost As Object, strInitFolder As String
'"Windows Script Host"オブジェクトを使用する
Set wScriptHost = CreateObject("WScript.Shell")
    '[お気に入り]フォルダのパスを取得する
    strInitFolder = wScriptHost.SpecialFolders("Favorites")
        
Set dlg = Application.FileDialog(msoFileDialogFolderPicker)
    
    '取得した[お気に入り]フォルダのパスを初期フォルダに指定
    dlg.InitialFileName = strInitFolder
    
    blAns = dlg.Show
        If blAns Then
            MsgBox "選択されたフォルダは、「" & dlg.SelectedItems(1) & "」です。"
        Else
            MsgBox "フォルダ選択がキャンセルされました。"
        End If
        
End Sub

指定できる特殊フォルダ一覧

上記の方法で指定できる特殊フォルダは以下のとおりです。

"SpecialFolders"の引数に下記の"対応するフォルダ"の"指定する文字列"の値を"(ダブルクォーテーション)でくくって指定すればよいです。

指定する文字列 対応するフォルダ
Desktop デスクトップフォルダ
Favorites お気に入りフォルダ
Fonts フォントフォルダ
MyDocuments マイドキュメントフォルダ
Programs プログラムフォルダ
Recent 最近開いたファイルフォルダ
SendTo 送るフォルダ
StartMenu スタートアップメニューフォルダ
StartUp スタートアップフォルダ

FileDialogプロパティを使用して[Windows]フォルダなどのシステムフォルダを初期フォルダとして選択させた状態で表示するサンプルプログラム

[Windows]フォルダ、[System32]フォルダ、[Temp]フォルダを初期フォルダとして指定したい場合は、"FileSystemObject"オブジェクトを使用して各フォルダのパスを取得します。

[Windows]フォルダはインストール時にユーザーが任意に指定できるので、必ずしも"C:\Windows"とは限りませんし、[Temp]フォルダもログインユーザーごとに異なるパスとなるため、プログラム内で固定して指定することができません。

システムフォルダを初期フォルダとして指定するサンプルプログラム

Sub FolderPicker_Sample05()
Dim dlg As Object, blAns As Boolean
Dim FSO As Object, strInitFolder As String
'"FileSystemObject"オブジェクトを使用する
Set FSO = CreateObject("Scripting.FileSystemObject")
    '[Windows]フォルダのパスを取得する
    strInitFolder = FSO.GetSpecialFolder(0)
        
Set dlg = Application.FileDialog(msoFileDialogFolderPicker)
    
    '取得した[Windows]フォルダのパスを初期フォルダに指定
    dlg.InitialFileName = strInitFolder
    
    blAns = dlg.Show
        If blAns Then
            MsgBox "選択されたフォルダは、「" & dlg.SelectedItems(1) & "」です。"
        Else
            MsgBox "フォルダ選択がキャンセルされました。"
        End If
        
End Sub

各システムフォルダと対応する値

プログラム中の"GetSpecialFolder"に指定する数値によって、[Windows]フォルダ、[System32]フォルダ、[Temp]フォルダのどのフォルダが指定されているのかが決まっているので、指定したいフォルダを表す数値を"GetSpecialFolder"の引数に指定してください。

指定する値 フォルダ
0 [Windows]フォルダ
1 [System32]フォルダ
2 [Temp]フォルダ

FileDialogプロパティを使用して[参照]ダイアログボックスを表示するサンプルプログラムのまとめ

FileDialogプロパティを使用してフォルダのみ選択できるダイアログボックスを表示するサンプルプログラムを紹介しました。

FileDialogプロパティに指定するオプション次第では[ファイルを開く]や[名前をつけて保存]ダイアログボックスとして使用することもできます。

FileDialogプロパティに関する詳細は、Microsoftの「Office デベロッパーセンター」の「Application.FileDialog プロパティ (Excel)」にも記載されているので参考にしてください。

また[お気に入り]フォルダや[Windows]フォルダなどの特殊なフォルダのパスを取得する方法については、以下の記事にも記載されているので参考にしてください。

VBA共通:デスクトップフォルダやマイドキュメントフォルダなどWindowsの特殊フォルダのパスをVBAで取得するサンプルプログラム
マイドキュメントフォルダやデスクトップフォルダなどログインユーザーによってパスが変わるフォルダやWindowsがセットアップ時に作成するSystemフォルダなどの特殊なフォルダのパスをVBAで取得するサンプルプログラムを覚書。 紹介するサン...

ExcelのVBAで[ファイルを開く]ダイアログボックスや[名前をつけて保存]ダイアログボックスを使用するサンプルについては、以下の記事がありますので参考にしてください。

Excel VBA:[ファイルを開く]ダイアログボックスを表示(GetOpenFilenameメソッド)してファイル名を取得する方法
ExcelのVBAを使用してダイアログボックスを表示し、選択されたファイルの名前を取得するサンプルプログラム。 ExcelのVBAではAccessと違って最初からダイアログボックスを開くための"GetOpenFilename"メソッドが用意...
Excel VBA:[ファイルを開く]ダイアログボックスを表示(GetOpenFilenameメソッド)してファイル名を取得する方法
ExcelのVBAを使用してダイアログボックスを表示し、選択されたファイルの名前を取得するサンプルプログラム。 ExcelのVBAではAccessと違って最初からダイアログボックスを開くための"GetOpenFilename"メソッドが用意...

FileDialogプロパティについては、AccessのVBAの過去の記事で結構あるので、参考にしてください。

FileDialogプロパティは、ExcelだけでなくAccessなど他のOfficeアプリケーションのVBAで共通して使えます。

FileDialogプロパティに関する記事は、過去何件か書いているので参考にしてください。

FileDialog
「FileDialog」の記事一覧です。

コメント

タイトルとURLをコピーしました