
ちなみにFileDialogオブジェクトのヘルプを見ると、
「定数 msoFileDialogOpen および定数 msoFileDialogSaveAs は Access ではサポートされていません。」
と記載されいるので、ここでのサンプルプログラムはMSサポート対象外となるので、使う際は自己責任で。
FileDialogオブジェクトを使用した[ファイルを開く]ダイアログボックスを表示するサンプルプログラムの動作前提条件
後述するAccessのVBAのサンプルプログラムの動作確認は、Access 2013で行っています。 また、FileDialogオブジェクトを使用する際には必ず[参照設定]で以下のオブジェクトライブラリの参照を有効にして置く必要があります。参照を有効化するオブジェクトライブラリ
Microsoft Office 15.0 Object Library ※15.0というバージョンは、Accessのバージョンによって異なります。オブジェクトライブラリの参照手順
以下に「Microsoft Office 15.0 Object Library」の参照手順を記載します。- Accessのリボンツールバーの[作成]タブをクリックする。
- [作成]タブの右端にある[Visual Basic]をクリックする。
- [Microsoft Visual Basic for Applications]画面(VBAエディタ)が開くので[ツール]メニューの[参照設定]をクリックする。
- [参照可能なライブラリ ファイル]の一覧(五十音順に並んでいます)から「Microsoft Office 15.0 Object Library」のチェックをオンにして[OK]をクリックする。
複数のファイルを選択できる[ファイルを開く]ダイアログボックスの表示について
FileDialogオブジェクトは、デフォルトだと複数ファイル選択の可否を表す"AllowMultiSelect"プロパティがTrueに設定されていて、[ファイルを開く]ダイアログボックスを表示させると[Ctrl]や[Shift]キー、マウスのドラッグなどで複数のファイルを選択できるようになっている。前回の覚書では"AllowMultiSelect"プロパティをFalseにしたサンプルプログラムばかりを作ったので、今回は前回の記事の追加として"AllowMultiSelect"プロパティがTrueの場合の処理に関するサンプルプログラムを覚書する。
複数選択できる[ファイルを開く]ダイアログボックスのサンプルプログラム
サンプルプログラムとして、複数選択できる[ファイルを開く]ダイアログボックスを表示し、選択されたファイルをメッセージボックスに表示するという内容になっている。Sub MultiSelectFileDialogSample01() Dim dlg As Object, boolResult As Boolean Dim strFiles As String, i As Long 'オブジェクト変数にFileDialogオブジェクトを代入 Set dlg = Application.FileDialog(msoFileDialogOpen) 'FileDialogオブジェクトの各種プロパティを設定 With dlg '複数選択可を表すTrueに設定(デフォルト) .AllowMultiSelect = True .Filters.Clear .Filters.Add "テキストファイル", "*.txt;*.csv" .Title = "ファイルを開く(複数選択可)" .ButtonName = "開く" .InitialFileName = "c:\temp\" End With '[ファイルを開く]ダイアログボックスを表示する boolResult = dlg.Show If boolResult Then For i = 1 To dlg.SelectedItems.Count strFiles = strFiles & dlg.SelectedItems(i) + vbCrLf Next i MsgBox "選択されたファイルは、" + vbCrLf + strFiles & "です。" Else '[キャンセル]ボタンが押された場合の処理 MsgBox "[キャンセル]ボタンが押されました。" End If End Sub
dlg.SelectedItems.Count は、選択されたファイルの数を教えてくれるプロパティで、ファイルを最低でも1つ選択しないと[開く]ボタンを押してもダイアログボックスが閉じないので[開く]ボタンが押されてダイアログボックスが閉じた場合は必ず1以上の値が保管される。
選択されたファイルのファイル名(フルパス)は、SelectedItems(インデックス番号)プロパティに保管されているので、For~Nextループを使用して1からSelectedItems.Countの数(選択されたファイル数)を最大値としてループさせる。
あとは、For~NextループのカウンターであるiをSelectedItemsで指定するインデックス番号に指定してあげれば順番に選択されたファイル名を取得することができる。
選択されたファイル1つ1つに何かしらの処理をしたい場合は、For~Nextループの中にその処理内容を記述するか、処理自体をサブルーチンにして取得したファイル名を引数としてサブルーチンに渡してあげて処理を任せるというのでも良い。
選択されたファイルに対する処理はサブルーチン化した方がプログラムも分かりやすくなるのでそっちのがオススメかな。
FileDialogオブジェクトの各種プロパティについて
FileDialogオブジェクトの各種プロパティやプロパティに設定できる値とその内容等、詳細については以下の記事を参照。Access VBA:AccessのFileDialogを使用して[ファイルを開く]ダイアログボックスを表示するサンプルプログラム
以上、終わり!
関連記事