ray88’s diary

お仕事で困ったとき用の自分用の覚書

VBA ダイアログよりパスを取得する(FileDialogオブジェクト)

■キーワード
 ダイアログ ファイルパス フォルダパス
※参照設定で「Microsoft Office XX.X Object Library」(XXX.X はバージョン番号)への参照を有効に設定する。
f:id:ray88:20200614091625p:plain
【ファイルを参照するダイアログボックスを表示する場合】

Sub selectFilePath()
    Dim targetPath As String
    Dim objDialog As Object   'FileDialogオブジェクト格納用
    'FileDialogオブジェクトをインスタンス化
    Set objDialog = Application.FileDialog(msoFileDialogFilePicker)
    '初期表示されるフォルダパスを設定
    objDialog.InitialFileName = "C:\Users\デスクトップ\テスト"
    'ダイアログを開いて選択したフォルダを親フォルダパスに指定
    If objDialog.Show Then
        targetPath = objDialog.SelectedItems(1)
        MsgBox targetPath
    Else
        MsgBox "ファイル選択キャンセル"
    End If
End Sub

【フォルダを参照するダイアログボックスを表示する場合】

Sub selectFolderPath()
    Dim targetPath As String
    Dim objDialog As Object   'FileDialogオブジェクト格納用  
    'FileDialogオブジェクトをインスタンス化
    Set objDialog = Application.FileDialog(msoFileDialogFolderPicker)  
    'ダイアログを開いて選択したフォルダを親フォルダパスに指定
    If objDialog.Show Then
        targetPath = objDialog.SelectedItems(1)
        MsgBox targetPath
    Else
        MsgBox "フォルダ選択キャンセル"
    End If
End Sub

■FileDialogオブジェクトの各プロパティを使用したコードの例

Sub testDialog()
    Dim targetPath As String
    Dim objDialog As Object   'FileDialogオブジェクト格納用  
    'FileDialogオブジェクトをインスタンス化
    Set objDialog = Application.FileDialog(msoFileDialogFilePicker)
    objDialog.InitialFileName = ThisWorkbook.Path
    objDialog.Filters.Clear
    objDialog.Filters.Add "テキスト", "*.txt", 1
    objDialog.Filters.Add "エクセル", "*.xlsx", 2
    objDialog.Filters.Add "すべてのファイル", "*.*", 3
    objDialog.FilterIndex = 3
    If objDialog.Show Then
        targetPath = objDialog.SelectedItems(1)
        MsgBox targetPath
    Else
        MsgBox "フォルダ選択キャンセル"
    End If    
End Sub

■msoFileDialogオブジェクトの主なプロパティ

プロパティ 内容
Title ダイアログボックスのタイトルを指定する
ButtonName 操作ボタンに表示される文字列を指定する
AllowMultiSelect 複数ファイルの選択が可能かどうかを設定する
InitialFileName 初期表示されるファイル名やフォルダのパスを指定する
Filters ダイアログボックスで選択できるファイルの種類を設定する
FilterIndex ダイアログボックスを開いたときに表示されるファイルの種類を設定する
SelectedItems ユーザーが選択したファイルのパスを取得する
メソッド 内容
Show ダイアログボックスを表示し、「キャンセル」ボタンが選択されると「0」を、それ以外が選択されると「-1」を返す

※InitialViewプロパティの主なMsoFileDialogViewクラスの定数

定数 内容
msoFileDialogViewDetails 詳細表示
msoFileDialogViewLargeIcons 大きいアイコンで表示
msoFileDialogViewList 一覧表示
msoFileDialogViewPreview プレビューで表示
msoFileDialogViewProperties プロパティで表示
msoFileDialogViewSmallIcons 小さいアイコンで表示
msoFileDialogViewThumbnail 縮小表示