FileDialog(ファイルダイアログ)について紹介していきます。
Application内のFileDialogオブジェクトを使用することで、ファイルやフォルダを選択、開く、保存するダイアログボックスを表示できます。
また、FileDialogはApplication内のオブジェクトなのでプロパティ、メソッドが存在します。
よって、前回記事で取り扱ったGetOpenFilenameメソッドとの大きな違いは、プロパティ・メソッドを活用して、多機能操作が可能ということになります。
GetOpenFilenameメソッドに関する記事はこちら↓
今回は、ファイル(フォルダ)の選択、開くを中心に解説します。
FileDialogの定数
FileDialogオブジェクトを使って4種類のダイアログを表示させることができます。
msoFileDialogFilePicker | ユーザーがファイルを選択できます。 |
msoFileDialogFolderPicker | ユーザーがフォルダーを選択できます。 |
msoFileDialogOpen | ユーザーがファイルを開くことができます。 |
msoFileDialogSaveAs | ユーザーがファイルを保存できます。 |
下図のようなファイルを取り扱うためのダイアログボックスが表示されます。
プロパティ・メソッド
主要なプロパティ・メソッドです。
プロパティ名 | 詳細 |
InitialFileName | ダイアログボックスに最初に表示されるパスまたはファイル名を指定します。 ※「msoFileDialogSaveAs」の場合はファイル名になります。 |
Filters | ファイルを選択・開く場合に、選択できるファイルの拡張子を限定できます。 【書き方】 単一の拡張子表示:filters.Add “任意の文字列”,”ファイル拡張子” 複数の拡張子表示:filters.Add “任意の文字列”,”1つ目拡張子;2つ目拡張子” 上記のように、文字列と拡張子を”(ダブルクォーテーション)で囲み、,(カンマ)で区切ります。 ※複数の場合は、1つ目と2つ目の拡張子の間にセミコロンをはさみます。 |
AllowMultiSelect | Trueを設定すると、複数ファイルを選択できます。 |
Title | ダイアログボックスのタイトルを設定します。 |
SelectedItems | FileDialogSelectedItems コレクションを取得します。 このコレクションには、FileDialog オブジェクトの Show メソッドによって表示されたファイルのダイアログ ボックスでユーザーが選択したファイルのパスの一覧が含まれます。 ※コレクションとは・・同じ種類のオブジェクトをまとめたもの |
メソッド名 | 詳細 |
Execute | ファイルダイアログで[開く]や[保存]などユーザーが選択したアクションが実行されます。 |
Show | [ファイル] ダイアログ ボックスを表示し、ユーザーが [アクション] ボタン (-1) を押したのか、または [キャンセル] ボタン (0) 押したのかを示す長整数型 (Long) の値を返します。 Show メソッドを呼び出すと、ユーザーが [ファイル] ダイアログ ボックスを閉じるまでコードの実行は停止します。 [開く] と [名前を付けて保存] ダイアログ ボックスの場合、ユーザーのアクションを実行するには Show メソッドの直後に Execute メソッドを使用します。 |
msoFileDialogFilePicker
「msoFileDialogFilePicker」で任意のファイルを選択して、ファイルパスを取得できます。
上記のプロパティ、メソッドを使って下記のコードを実行してみます。
1つのファイルを選択する
下記コードにて、ダイアログボックスから任意のExcelファイルを選択して、メッセージボックスでファイルパスを表示させます。
Sub ファイルを選択()
With Application.FileDialog(msoFileDialogFilePicker)
.InitialFileName = "D:"
.Filters.Clear
.Filters.Add "すべてのExcelファイル", "*.xlsx;*.xlsm"
.AllowMultiSelect = False
.Title = "えくせるふぁいるの選択"
If .Show = True Then
MsgBox .SelectedItems(1)
End If
End With
End Sub
上記コード中のWith構文についての解説はこちら↓
If .Show = True Then
Showメソッドにて、ファイル選択のダイアログボックスが表示されます。
.InitialFileName = "D:"
.Filters.Add "すべてのExcelファイル", "*.xlsx;*.xlsm"
.Title = "えくせるふぁいるの選択"
上記、プロパティにて、Dドライブの表示とダイアログボックスのタイトル「えくせるふぁいるの選択」になります。
また、Filtersメソッドにて、拡張子xlsxとxlsmが限定表示されます。
MsgBox .SelectedItems(1)
選択したファイルパス(FileDialogSelectedItems コレクションの1つ)がメッセージボックスで表示されます。
これらについて、定数をmsoFileDialogFolderPickerとすればフォルダの選択になります。
複数のファイルを選択する
今度は下記のコードで複数ファイルを選択して、ファイルの開く、閉じるを繰り返します。
Sub 複数ファイル選択()
Dim i As Long
With Application.FileDialog(msoFileDialogFilePicker)
.AllowMultiSelect = True
.Filters.Clear
.Filters.Add "ふくすう", "*.xlsm;*.xlsx"
If .Show = True Then
For i = 1 To .SelectedItems.Count
Workbooks.Open .SelectedItems(i)
Workbooks(Workbooks.Count).Close False
Next i
End If
End With
End Sub
Application.FileDialog(msoFileDialogFilePicker).AllowMultiSelect = True
AllowMultiSelectをTrueに設定することで、複数ファイルの選択が可能になります。
For i = 1 To .SelectedItems.Count
Workbooks.Open .SelectedItems(i)
Workbooks(Workbooks.Count).Close False
Next i
FileDialogSelectedItems コレクションのCountプロパティでコレクションの数を返します。
つまり、SelectedItems.Countは選択したファイルの個数です。
そして、For文を使って選択したファイルの個数分ループさせて、ファイルを開き、そして閉じる動作を繰り返します。
Openメソッド(ワークブックを開く動作)についての解説はこちら↓
上記コードでは、保存しないで閉じる処理Workbooks(Workbooks.Count).Close Falseですが、保存する場合の処理についての解説はこちら↓
msoFileDialogOpen
「msoFileDialogOpen」で任意のファイルを開きます。
msoFileDialogFilePicker、msoFileDialogFolderPickerとの明確な違いは、ダイアログボックスで「開く」ボタンを押せば、Executeメソッドで開く仕組みです。
(msoFileDialogFilePicker、msoFileDialogFolderPickerの場合、あくまで選択するだけの定数なので、コード上でOpenメソッドの記述が必要です。)
Sub ファイルを開く()
With Application.FileDialog(msoFileDialogOpen)
.Filters.Clear
.Filters.Add "Excelブック", "*.xls; *.xlsx; *.xlsm"
.InitialFileName = "C:"
If .Show = True Then
.Execute
End If
End With
End Sub
.Filters.Clear
.Filters.Add "Excelブック", "*.xls; *.xlsx; *.xlsm"
.InitialFileName = "C:"
先述の解説と同様、InitialFileNameでCドライブを初期表示させます。
Filtersメソッドにて、拡張子xlsxとxlsmが限定表示されます。
.Execute
Executeメソッドは、ユーザーが行ったアクションが実行されます。
つまり、ユーザーがダイアログボックスでファイルを選択して、「開く」ボタンを押すアクションがExecuteメソッドで実行されます。
筆者オススメのVBAの本はこちら↓
msoFileDialogSaveAs
「msoFileDialogSaveAs」で、任意のファイル名で名前を付けて保存します。
Sub ファイルを保存()
With Application.FileDialog(msoFileDialogSaveAs)
If .Show = False Then
Exit Sub
End If
.Execute
End With
End Sub
出現するダイアログボックスのボタンは「保存」です。
まとめ
今回はファイルを開く処理として、Application内のFileDialogオブジェクトのmsoFileDialogFilePicker、msoFileDialogOpenを中心に紹介しました。
ポイントは以下の通りです。
1,ユーザーにファイル選択等を委ねることができる
2,プロパティ、メソッドを使って操作できる
是非、参考にしてみてください。
コメント