こんにちは、hokkyokunです。
VBAでダイアログを出現させて、ファイルを取得する関数を作りました。
Application.Dialogを使います。
Application.FileDialogとは
Application.FileDialog
オブジェクトは、VBAを使用してダイアログボックスを表示し、ユーザーにファイルやフォルダの選択をさせるための機能を提供します。
以下に Application.FileDialog
の基本的な使い方をまとめます。
Application.FileDialog
オブジェクトを作成する
FileDialogはオブジェクト変数に格納させる方法です。
インスタンスを生成します。
Dim fileDialog As FileDialog
Set fileDialog = Application.FileDialog(dialogType)
引数は以下の通りです。
dialogType | 種類 | 説明 |
---|---|---|
msoFileDialogOpen | ファイルを開く | ファイルを選んで開く時に使います。 |
msoFileDialogSaveAs | 名前を付けて保存 | ファイルを保存する時に使います。ファイル名を指定することができます。 |
msoFileDialogFilePicker | ファイルを選ぶ | 特定の種類のファイルを選ぶ時に使います。 |
msoFileDialogFolderPicker | フォルダを選ぶ | フォルダを選ぶ時に使います。指定したフォルダ内のファイルを選択することはできません。 |
これらのダイアログボックスを使って、ファイルの選択や保存、フォルダの選択などを実現することができます。
試しに使ってみます。
ダイアログを出現させるためには「fileDialog.Show」で、
Showメソッドを使用します。
Sub SelectFile()
Dim fileDialog As fileDialog
Dim filePath As String
' ファイル選択ダイアログボックスを作成
Set fileDialog = Application.fileDialog(msoFileDialogFilePicker)
'選択したファイルのファイルパスを取得
fileDialog.Show
filePath = fileDialog.SelectedItems(1)
Debug.Print fileDialog.SelectedItems(1)
'>>C:\Users\ユーザー名\Documents\abountETF\ID_lists.xlsx
Debug.Print fileDialog.SelectedItems.Parent.InitialFileName
'>>C:\Users\ユーザー名\Documents\abountETF\
End Sub
私が別件で作っている株式投資用ページのETFのリストのファイルパスを取得できました。
fileDialogオブジェクトは
- ファイルパス以外にも
→「fileDialog.SelectedItems(1)」 - そのファイルが格納されているフォルダパス
→「fileDialog.SelectedItems.Parent.InitialFileName」
も取得できる
ダイアログで「キャンセル」を押すとプログラムが止まってしまうので
しっかりしたエラー対策が必要です。
その前にエラー回避をするためにはダイアログボックスのプロパティの知識が必要なので、そこを見てみましょう。
ダイアログボックスのプロパティを設定する
fileDialog.Title = "ファイルを選択してください"
fileDialog.Filters.Clear
fileDialog.Filters.Add "テキストファイル", "*.txt"
fileDialog.InitialFileName = "C:\Documents"
プロパティ名 | 説明 |
---|---|
Title | ダイアログボックスのタイトルを設定します。 |
AllowMultiSelect | 複数のファイルを選択できるようにするかどうかを設定します。 |
Filters | ファイルのフィルターを設定します。特定の拡張子やファイルの種類だけを表示できます。 |
InitialFileName | ダイアログボックスの初期表示として指定するファイルのパスやフォルダのパスを設定します。 |
InitialView | ダイアログボックスの初期表示ビューを設定します。 |
ButtonName | ダイアログボックスのボタンの表示名を設定します。 |
Show | ダイアログボックスを表示し、ユーザーの操作を待ちます。 |
ダイアログボックスを表示し、ユーザーの選択結果を処理する
If fileDialog.Show = -1 Then
' ユーザーがファイルを選択した場合の処理
' 選択されたファイルやフォルダの情報にアクセスする方法は後述します
Else
' ダイアログがキャンセルされた場合の処理
End If
Show
メソッドはダイアログボックスを表示し、ユーザーが選択した場合は -1
、キャンセルされた場合は 0
を返します。
ダイアログを出現させてファイルパスを取得する関数
Function GetExcelFilePath(initialFolder As String) As String
Dim filePath As String
Dim fileDialog As FileDialog
' ファイル選択ダイアログボックスを作成
Set fileDialog = Application.FileDialog(msoFileDialogFilePicker)
' ダイアログボックスのタイトルを設定
fileDialog.Title = "Excelファイルを選択してください"
' 初期表示フォルダの設定
fileDialog.InitialFileName = initialFolder
' ファイルのフィルターを設定
fileDialog.Filters.Clear
fileDialog.Filters.Add "Excelファイル", "*.xlsx; *.xls; *.xlsm"
' ダイアログボックスを表示し、ファイルが選択された場合のみ処理を継続
If fileDialog.Show = -1 Then
' 選択されたファイルのパスを取得
filePath = fileDialog.SelectedItems(1)
End If
' ダイアログボックスを破棄
Set fileDialog = Nothing
' ファイルのパスを返す
GetExcelFilePath = filePath
End Function