FileDialogオブジェクトについての説明と、その利用例 ライブラリ「Microsoft Office (バージョン) Object Library」ファイルに格納されているオブジェクト 参照設定で「MicrosoftOffice (バージョン) Object Library」を選択 事前バインディングで参照すれば、エラーの確認・メンバ表示などを利用できるという利点があるが 当記事では事前バインディングでオブジェクトを参照するが、実行時バインディングを利用する場合の記述例は以下のページ オブジェクト変数にFileDialogオブジェクトへの参照を格納 書式: ▼記述例▼ 書式: ▼記述例▼ ・Title ダイアログボックスの左上に表示される文字列(タイトル)の指定 ・FilterIndex 表示されるファイルの種類を設定 ・AllowMultiSelect 複数ファイルの選択を可能とするかどうか ・msoFileDialogViewDetails 詳細表示モード ・Show ダイアログボックスの表示 ・FileDialogオブジェクトのメソッドを使用して、ファイル選択用のダイアログボックスを表示 ▼処理結果_ファイルを選択してOKボタンを押した場合▼ ▼処理結果_キャンセルボタンを押した場合▼ ファイルではなくフォルダを選択するだけのダイアログボックスは、以下の記述でも表示できる ▼記述例▼ Shell.Applicationのほうが手軽だけれど、あれこれ手法があると混乱するからいまは「そういう手法もあるんだな」程度でいいや…
【FileDialog】オブジェクトとは
フォルダ・ファイルを参照するためのダイアログボックスを表示し、選択対象のパスを取得することができる事前バインディングで参照
実行時(遅延)バインディングで参照
VBA作成者のPCのofficeオブジェクトライブラリのバージョンと、その他のユーザ側のバージョンの違いにより動かないケースがありうる
それを避けるためには、実行時バインディングを採用するほうが安全なのやもしれない
※実行時バインディングを利用することによる処理のスピードの違いというのはそこまでないらしい
…であれば、構文までは事前バインディングで行って、みんなで使うとなったときに実行時バインディングに変更したらよいのかな
▼よくわかる解説▼
参照設定を使用せずにアクセスでファイル選択ダイアログを使うには | 旅馬【FileDialog】オブジェクトの取得
フォルダを参照するダイアログボックス
Dim オブジェクト変数 As FileDialog
Set オブジェクト変数 = Application.FileDialog(msoFileDialogFolderPicker) Dim FolderDialogInfo As FileDialog '外部のオブジェクトの参照を格納
Set FolderDialogInfo = Application.FileDialog(msoFileDialogFolderPicker) 'ダイアログボックスの表示指定
ファイルを参照するダイアログボックス
Dim オブジェクト変数 As FileDialog
Set オブジェクト変数 = Application.FileDialog(msoFileDialogFilePicker) DimFileDialogInfo As FileDialog '外部のオブジェクトの参照を格納
Set FileDialogInfo = Application.FileDialog(msoFileDialogFilePicker) 'ダイアログボックスの表示指定
【FileDialog】オブジェクトのプロパティ
ダイアログボックスのみための設定
・ButtonName ダイアログボックス内のボタンに表示される文字列の指定
・InitialView ダイアログボックスの表示方法をMsoFileDialogViewクラスにより指定※後述
他ダイアログボックスに表示するファイル/フォルダの設定
・Filters 選択可能なファイルの種類を設定
・InitialFileName 初期表示ファイル(フォルダ)を指定
他ダイアログボックスでユーザが行うことに関する設定
・SelectedItems 選択したパスの取得
他MsoFileDialogViewクラスの定数によるダイアログボックスの表示設定
・msoFileDialogViewList 一覧表示モード
・msoFileDialogThumbnail 縮小表示モード
・msoFileDialogViewLargeIcons 大きなアイコンで表示
・msoFileDialogViewLargeSmallIcons 小さなアイコンで表示
・msoFileDialogViewPreview プレビューの表示
・msoFileDialogViewProperties プロパティの表示
【FileDialog】オブジェクトのメソッド
→OKボタン:「0」 / キャンセルボタン:「-1」
他【実践】ファイル選択用ダイアログボックス表示の記述例
・初期表示される場所は「"C:\Users\user\Desktop\tama-shi"」、拡張子が「.xlsx」のファイルのみをダイアログボックスに表示
・選択できるファイルの種類は「.xlsx」またはすべてのファイルのどちらかを選べるようにする
・ファイルを選択してOKボタンを押したらメッセージボックスにパスを表示
・キャンセルボタンを押した場合には「キャンセルしました」というメッセージを表示する
▼記述例▼Sub Test_FileDialog()
Dim FileDialogInfo As FileDialog '外部のオブジェクトの参照を格納
Set FileDialogInfo = Application.FileDialog(msoFileDialogFilePicker) 'ダイアログボックスの表示指定
Dim FPath As String '初期表示
FPath = "C:\Users\user\Desktop\tama-shi"
FileDialogInfo.InitialFileName = FPath '初期表示する場所
FileDialogInfo.Title = "Excelファイルを選んでください"
FileDialogInfo.Filters.Clear '既定の設定をクリア
FileDialogInfo.Filters.Add "Excel", "*.xlsx", 1 '表示可能なファイルの選択肢のひとつめに.xlsxを設定
FileDialogInfo.Filters.Add "すべてのファイル", "*.*", 2 '表示可能なファイルの選択肢のふたつめにすべてのファイルを設定
FileDialogInfo.FilterIndex = 1 'ダイアログボックスを表示したときに表示されるファイルをどれにするか、フィルタの中から選択
If FileDialogInfo.Show Then
MsgBox "選択したファイルのパスは" & vbCrLf & FileDialogInfo.SelectedItems(1)
Else
MsgBox "キャンセルしました"
End If
Set FileDialogInfo = Nothing '念のため参照を解除
End Sub
▼処理結果_ダイアログボックスの表示▼
タイトルや最初に表示するファイルの種類等、設定できた
【番外編】Shell.Applicaionでフォルダ選択ダイアログボックスを表示
この場合、設定するのはタイトルくらいなので手軽につかえる
ちなみに「&H0」Hのあとは英語のオーではなく数字のゼロ、なぜ数字なのかは以下の記事を読むとおおかた理解できる
▼参考記事▼
[VBA]フォルダ選択ダイアログの使い方・使い分けSub Test_FileDialogShell()
Dim Shell_Info As Object
Set Shell_Info = CreateObject("Shell.Application")
Set Shell_Info = Shell_Info.BrowseForFolder(&H0, "フォルダを選択してください", &H0)
If Not Shell_Info Is Nothing Then
MsgBox Shell_Info.Items.Item.Path
Set Shell_Info = Nothing
End If
End Sub
▼処理結果▼