Accessロゴ

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

動作させた環境はAccess 2010。

ちなみに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」の参照手順を記載します。
  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つのファイルしか選択できないようにしている。
Sub FileDialogSample01()
Dim dlg As Object, boolResult As Boolean

'オブジェクト変数にFileDialogオブジェクトを代入
Set dlg = Application.FileDialog(msoFileDialogOpen)

dlg.AllowMultiSelect = False
'[ファイルを開く]ダイアログボックスを表示する
boolResult = dlg.Show

    If boolResult Then
        MsgBox "ファイル「" & dlg.SelectedItems(1) & "」が選択されました。"
    Else
        '[キャンセル]ボタンが押された場合の処理
        MsgBox "[キャンセル]ボタンが押されました。"
    End If

End Sub
まずポイントとなるのは、9行目の[ファイルを開く]ダイアログボックスを表示している行。
[ファイルを開く]ダイアログボックスが閉じられた際の戻り値"boolResult"変数には、ファイルが選択されたかそれとも[キャンセル]が押されたかを表す真偽値が代入される点。

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

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

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

'オブジェクト変数にFileDialogオブジェクトを代入
Set dlg = Application.FileDialog(msoFileDialogOpen)

'FileDialogオブジェクトの各種プロパティを設定
With dlg
    .AllowMultiSelect = False
    .FilterIndex = 3
    .Title = "ファイルを開くダイアログボックスサンプル"
    .ButtonName = "オープン"
    .InitialFileName = "c:\temp\"
End With

'[ファイルを開く]ダイアログボックスを表示する
boolResult = dlg.Show

    If boolResult Then
        MsgBox "ファイル「" & dlg.SelectedItems(1) & "」が選択されました。"
    Else
        '[キャンセル]ボタンが押された場合の処理
        MsgBox "[キャンセル]ボタンが押されました。"
    End If

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

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

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

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

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

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



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

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

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

'オブジェクト変数にFileDialogオブジェクトを代入
Set dlg = Application.FileDialog(msoFileDialogOpen)

'FileDialogオブジェクトの各種プロパティを設定
With dlg
    .AllowMultiSelect = False
    .Filters.Clear
    .Filters.Add "csvファイル", "*.csv"
    .Title = "ファイルを開くダイアログボックスサンプル"
    .ButtonName = "オープン"
    .InitialFileName = "c:\temp\"
End With
'[ファイルを開く]ダイアログボックスを表示する
boolResult = dlg.Show

    If boolResult Then
        MsgBox "ファイル「" & dlg.SelectedItems(1) & "」が選択されました。"
    Else
        '[キャンセル]ボタンが押された場合の処理
        MsgBox "[キャンセル]ボタンが押されました。"
    End If

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

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

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

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

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

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

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

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

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

スポンサードリンク

  

関連記事