VBA:AccessのFileDialogを使用して[ファイルを開く]ダイアログボックスを表示するサンプルプログラム

Access VBA:AccessのFileDialogを使用して[ファイルを開く]ダイアログボックスを表示するサンプルプログラム

今回はAccessの”FileDialog”オブジェクトを使用して[ファイルを開く]ダイアログボックスを表示させて利用するサンプルプログラムを覚書。

サンプルプログラムの概要

以前Accessの非公開オブジェクト”WIZHOOK”オブジェクトを使用して[ファイルを開く]ダイアログボックスを表示して利用するサンプルプログラムを記事にしましたが、今回はFileDialogオブジェクトを使います。

動作させた環境はAccess 2010です。

ちなみにFileDialogオブジェクトのヘルプを見ると、

「定数 msoFileDialogOpen および定数 msoFileDialogSaveAs は Access ではサポートされていません。」

と記載されいるので、ここでのサンプルプログラムは全部MSサポート対象外となるので、使う際は自己責任で。

サンプルプログラムの動作前提条件

後述するAccessのVBAのサンプルプログラムの動作確認は、Access 2013で行っています。

また、FileDialogオブジェクトを使用する際には必ず[参照設定]で以下のオブジェクトライブラリの参照を有効にしておく必要があります。

参照設定するオブジェクトライブラリ

Microsoft Office 15.0 Object Library

※15.0というバージョンは、Accessのバージョンによって異なります。

オブジェクトライブラリの参照手順

以下に「Microsoft Office 15.0 Object Library」の参照手順を記載します。

  1. Accessのリボンツールバーの[作成]タブをクリックする。
  2. [作成]タブの右端にある[Visual Basic]をクリックする。
  3. [Microsoft Visual Basic for Applications]画面(VBAエディタ)が開くので[ツール]メニューの[参照設定]をクリックする。
  4. [参照可能なライブラリ ファイル]の一覧(五十音順に並んでいます)から「Microsoft Office 15.0 Object Library」のチェックをオンにして[OK]をクリックする。

Microsoft Office 15.0 Object Library

[ファイルを開く]ダイアログボックスを表示する基本サンプルプログラム

まずはデフォルト設定の状態で[ファイルを開く]ダイアログボックスを表示する簡単なサンプルプログラムを以下に記載する。

※デフォルトではファイルの複数選択ができる状態になっているので、その設定のみオフとして1つのファイルしか選択できないようにしている。

まずポイントとなるのは、7行目の[ファイルを開く]ダイアログボックスを表示している行。

[ファイルを開く]ダイアログボックスが閉じられた際の戻り値”boolResult”変数には、ファイルが選択されたかそれとも[キャンセル]が押されたかを表す真偽値が代入される点。

ファイルが選択された[開く]ボタンが押された場合にはboolResult変数にTrueが代入され、[キャンセル]が押された時はFalseが代入される。

[ファイルを開く]ダイアログボックスを表示する際に各種プロパティを設定した場合のサンプルプログラム

次のサンプルプログラムは、FileDialogオブジェクトの代表的なプロパティを設定した上で[ファイルを開く]ダイアログボックスを表示するサンプル。

上記サンプルプログラムは、[ファイルを開く]ダイアログボックスを表示する際に以下の設定内容で表示するようにプロパティが指定されている。

  • ファイルの複数選択不可
  • デフォルトのファイルの種類指定に”Microsoft Access データベース(*.mdb;*.accdb)”を指定
  • [ファイルを開く]ダイアログボックスのタイトル文字列を”ファイルを開くダイアログボックスサンプル”に変更
  • [ファイルを開く]ダイアログボックスの[開く]ボタンのボタン名を[オープン]に変更
  • ファイルを開くフォルダのデフォルト参照フォルダを”c:\temp”に指定

サンプルプログラム中で指定しているプロパティについて

サンプルプログラムで指定している各種プロパティについては、以下の表を参照。

プロパティ名意味
AllowMultiSelectファイルの複数選択可否
FilterIndex開くファイルの種類を限定するためのフィルタ設定値
Titleダイアログボックスのタイトルバーに表示したい文字列
ButtonName[開く]ボタンの””開く””を違う文字に指定したい場合に設定
InitialFileNameデフォルトのファイルもしくはフォルダを指定したい場合に設定

FilterIndexプロパティについての詳細

FilterIndexプロパティは、選択できるファイルの種類(拡張子)を指定したい場合に使用するプロパティで、指定できるファイルの種類は24種類用意されており、以下の画面のコンボボックスの一覧の並び順がそのまま指定する数字に対応している。

FilterIndexプロパティの値と対応するファイルの種類については以下の表を参照。

FilterIndex値ファイルの種類
1すべてのファイル(*.*)
2Microsoft Access データベース(*.accdb;*.mdb;*.adp;*.mda;*.accda;*.mde;*.accde;*.ade)
3Microsoft Access データベース(*.mdb;*.accdb)
4Microsoft Access Web App 参照(*.accdt)
5Microsoft Access データベース テンプレート(*.accdt)
6Microsoft Access 署名済パッケージ(*.accdc)
7Microsoft Access 2007 データベース(*.accdb)
8Microsoft Access プロジェクト(*.adp)
9アドイン(*.mda;*.accda)
10ワークグループ ファイル(*.mdw)
11MDE ファイル(*.mde)
12ADE ファイル(*.ade)
13ACCDE ファイル(*.accde)
14Microsoft SharePoint Foundation ()
15dBASE 5(*.dbf)
16dBASE Ⅲ(*.dbf)
17dBASE Ⅳ(*.dbf)
18Excel バイナリ ブック(*.xlsb)
19Excel マクロ有効ブック(*.xlsm)
20Excel ブック(*.xlsx)
21Microsoft Excel(*.xls)
22Exchange()
23Outlook()
24テキスト ファイル(*.txt;*.csv;*.tab;*.asc)

[ファイルを開く]ダイアログボックス表示サンプルプログラム3

FilterIndexプロパティについて、デフォルトで用意されているファイルの種類を指定する方法については、サンプルプログラム2で説明したけど、例えば指定できるファイルの種類をCSV(*.csv)形式のみに限定したいという場合のサンプルプログラム。

指定できるファイルの種類を限定したい場合は、まず現在のFiltersの中身をクリアして空っぽにする”Filters.Clear”を実行し、その後にファイルの種類を表す文字列と拡張子の組み合わせを”,”で区切って指定する。

サンプルプログラムの8行目と9行目がその処理になる。

上記サンプルプログラムの例だとファイルの種類ボックスに表示される文字列は、”csvファイル (*.csv)”となり、拡張子がcsvのファイルのみ表示されるようになる。

ちなみに、複数のファイルの種類を指定したい場合、例えば拡張子がcsvとテキストファイル(テキストファイルには、*.txt、*.iniを含める)とprnのファイルをそれぞれ指定できるようにするには、単純にFilters.Addを以下のように追加していけばよい。

上記のテキストファイル形式の指定のように1つのファイルの種類に複数の拡張子を含めたい場合は、”;”で区切って指定すれば良い。

ファイルを開く、名前を付けて保存ダイアログボックスを表示する他のサンプルプログラム

この記事の方法とは別の方法で[ファイルを開く]ダイアログボックスや[名前を付けて保存]ダイアログボックスを表示させて利用するサンプルプログラムを記述した記事が別であるので参考までに記載しておく。

AccessのVBAで”WizHook”オブジェクトを使用して[ファイルを開く]、[名前をつけて保存]ダイアログボックスを表示する方法について覚書。
AccessのVBAでWizHookオブジェクトを使用してもしくは、ダイアログボックスを表示する際に選択される初期フォルダを任意のフォル...

複数ファイル選択時の処理、フォルダのみ選択、[名前を付けて保存]ダイアログボックスなど

ファイルの複数選択を可にした場合の処理方法やFileDialogオブジェクトを使用したフォルダのみの選択できるダイアログボックス、[名前を付けて保存]ダイアログボックスのサンプルプログラムと解説はこの記事が思ったより長くなってしまったので別の記事で覚書。