ray88’s diary

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

ダイアログボックスよりファイルパス取得またはフォルダパス取得

■以下のコードはファイルパスを取得するコード
 Set objDialog = Application.FileDialog(msoFileDialogFilePicker) を
 Set objDialog = Application.FileDialog(msoFileDialogFolderPicker) に変更すればフォルダパスが取得できる

Sub getFilePath()

    Dim objDialog As FileDialog  'FileDialogオブジェクト格納用変数
    Dim targetPath As String    'ファイルパス格納用変数
    'ファイルパスを取得する場合
    Set objDialog = Application.FileDialog(msoFileDialogFilePicker)
    
    'フォルダパス取得の場合はこちら
    'Set objDialog = Application.FileDialog(msoFileDialogFolderPicker)
        
    '点線で囲った部分は設定の必要がなければコメントアウトして使用する
    '-------------------------------------------------------------------------
    '初期表示されるファイル名またはフォルダ名を指定
    objDialog.InitialFileName = "C:\Users\cryst\OneDrive\デスクトップ\テスト"
    'ダイアログボックスの「ファイルの種類」に適用されるフィルタを設定
    objDialog.Filters.Clear
    'フィルターリストの1番目
    objDialog.Filters.Add "テキスト", "*.txt", 1
    'フィルターリストの2番目
    objDialog.Filters.Add "エクセル", "*.xlsx", 2
    'フィルターリストの3番目
    objDialog.Filters.Add "すべてのファイル", "*.*", 3
    'リストで3番目に設定したファイルの種類がダイアログボックスを
    '開いた時に表示される
    objDialog.FilterIndex = 3
    '-------------------------------------------------------------------------
    'Showメソッドの戻り値が「-1」のときはTrue(ファイルが選択された時)
    '「0」のときはFalse(ファイルが選択されなかった時)
    If objDialog.Show Then
        'ファイルが選択された時は変数に選択されたファイルのパスを格納
        targetPath = objDialog.SelectedItems(1)
        'デバック用
        'Debug.Print targetPath
    Else
        MsgBox "ファイル選択をキャンセルしました"
    End If
    'オブジェクト変数を解放
    Set objDialog = Nothing
    
End Sub