VBAから処理のためにユーザーに処理対象のブックを開かせたい、処理結果を保存したいのでファイル名を入力してほしい、そういうことが必要になる場面は必ずあります。
そんなときに使えるのがFileDialogです。
この記事では、FileDialogの使用方法を解説し、サンプルコードを掲載します。
FileDialogとは?
これは「ファイルを開く」のダイアログの例ですが、このようなダイアログを表示して、そしてそこで選ばれたファイルをVBAで開くことができます。
「ファイルを保存」「ファイルを選択」「フォルダを選択」のダイアログもあります。
いずれも、Windows標準のダイアログですので、ユーザーにとっては使い慣れたインターフェースで、利便性の高いものとなります。
VBAでファイルに関する操作をユーザーにしてもらうときにはFileDialogを使用します。
FileDialogの種類
コンストラクタに定数を指定することで、FileDialogの種類を決められます。
コンストラクタの書き方は例えばこうです。
Dim fd As FileDialog Set fd = Application.FileDialog(msoFileDialogOpen)
FileDialogを格納する変数はDimで宣言します。Dimで宣言しているので、格納時にはSetを使用します。
Applicationから書き始めてください。FileDialogはこのように書かないと作成できません。
ダイアログの種類と定数は以下です。
msoFileDialogOpen:ユーザーがファイルを開く
msoFileDialogSaveAs:ユーザーがファイルを保存
msoFileDialogFilePicker:ユーザーがファイルを選択する
msoFileDialogFolderPicker:ユーザーがフォルダを選択する
複数選択するには?
複数選択するには、AllowMultiSelectプロパティをTrueにします。
ファイルの種類を限定する
ファイルの種類を限定したいときは、以下のように記述します。
With fd .Filters.Clear .Filters.Add "画像", "*.png; *.jpg" End With
Filtersにセットするのですが、まずフィルタをクリアしないと、セットすることができません。なので、クリアしてからセットしましょう。
また書き方はこのように書きます。まずその種類の名前、それから拡張子をこのように書きます。*.や;を忘れずに書いてください。
初期ファイル
初期フォルダや初期ファイル名を指定したいときは、以下のように記述します。
With fd .InitialFileName = "D:\FileDialogサンプル.png" End With
フルパスで書いてください。
FileDialogの例
それでは、FileDialogの例を挙げていきます。
ファイルを開く
Sub test1() Dim fd As FileDialog Set fd = Application.FileDialog(msoFileDialogOpen) With fd .Filters.Clear .Filters.Add "Excelファイル", "*.xlsx; *.xlsm; *.xls" .AllowMultiSelect = True If .Show = -1 Then For Each Item In .SelectedItems .Execute Next Else End If End With Set fd = Nothing End Sub
まずフィルタと複数選択を設定しています。
Showで表示します。戻り値が-1なら「開く」ボタンが押されているので、選択されたファイル(SelectedItemsに入っています)に対してExecuteを実行すれば開けます。
ファイルを保存する
Sub test2() Dim fd As FileDialog Set fd = Application.FileDialog(msoFileDialogSaveAs) With fd If .Show = -1 Then For Each Item In .SelectedItems .Execute Next Else End If End With Set fd = Nothing End Sub
保存も開く場合と記述の手順は同じです。自分を保存します。
パスを取得する
Sub test3() Dim fd As FileDialog Set fd = Application.FileDialog(msoFileDialogFilePicker) With fd .AllowMultiSelect = False If .Show = -1 Then For Each Item In .SelectedItems MsgBox (Item) Next Else End If End With Set fd = Nothing End Sub
Itemにはフルパスが入っています。
msoFileDialogPickerをmsoFileDialogFolderPickerにすれば、ユーザーにフォルダを選択してそのフルパスを取得することができます。
まとめ
この記事では、FileDialogについて解説してきました。
このFileDialog、マイクロソフトのヘルプだと解説が分散していて少し分かりにくいです。そのために苦手な印象を持っている方もいらっしゃるようですが、実はそれほど難しいものではありません。
具体的には、ユーザーに処理対象のデータが入ったファイルを開いてもらったりするときに使えますので、使っていきましょう。