Access でインポート用ファイル選択ダイアログを使う方法(FileDialogオブジェクト)

テクニック

フォームのボタンクリックでデータをインポートする場合、対象ファイルを自分で選択したいケースがあります。

以前の解説記事では、インポート処理の中に固定のファイルパスを埋め込む方法をご紹介しましたが、実務で運用するとなると、もっと柔軟に対応したいところです。

そこで今回の記事では、Accessフォームからのインポート時に、ファイル選択ダイアログを表示する方法として「FileDialogオブジェクト」の使い方を丁寧に解説します。

ファイル選択ダイアログボックスとは

ダイアログボックスとは、ExcelやWordの保存画面でもおなじみの、以下のような選択画面のことです。

フォームに設置したボタンに、FileDialogオブジェクトを設定することで、データをインポートする際にこのような選択画面を通じて、自由にデータを選んでインポートを行うことができます。

一長一短はありますが、ダイアログボックスを前提とすることで、ファイル保存場所や取得先のルールを厳格化する必要がないので、統制面ではより汎用的な運用が可能になります。

構文

FileDialogオブジェクトを使用するには、定められた構文をVBAコードとして記述します。ファイルを参照するダイアログボックスと、フォルダを参照するダイアログボックスの2種類があります。

ファイル参照する場合

Dim オブジェクト変数 As FileDialog
Set オブジェクト変数 = Application.FileDialog(msoFileDialogFilePicker)

msoFileDialogFilePickerが、ファイルを選択するためのキーワードです。

フォルダを参照する場合

Dim オブジェクト変数 As FileDialog
Set オブジェクト変数 = Application.FileDialog(msoFileDialogFolderPicker)

msoFileDialogFolderPickerが、フォルダを選択するためのキーワードです。
フォルダの場合は、エクスポート(ファイルの書き出し)で使用することが多いです。

FileDialogオブジェクトのプロパティ

実際にFileDialogオブジェクトを使用する際には、上記の構文に加え、必要に応じて各種プロパティ項目を追加します。うまく組み合わせることで、より効率的にファイルを選択できるようになります。

プロパティ一覧(主なものを抜粋)

プロパティ名内容使用例/備考
Titleダイアログのタイトルバーに表示
される文字列を指定
.Title = "取込むファイルを選択して
ください"
ButtonName操作ボタンに表示される文字列を指定.ButtonName = "インポート開始"
AllowMultiSelectユーザーがファイル(またはフォルダ)
を複数選択できるか。
True = 複数選択可
False = 単一選択のみ
.AllowMultiSelect = False
InitialViewファイルやフォルダの表示形式を指定※下表「定数一覧」を参照
InitialFileName初期表示されるファイルやフォ
ルダのパスを指定
.InitialFileName = "C:\Users\momo\Documents\"
Filtersダイアログで選択可能なファイルの種類を限定する。たとえば「Excelファイルのみ」「CSV/テキストのみ」など。.Filters.Add "Excel ファイル", "*.xlsx; *.xls"
FilterIndexどのフィルタをデフォルトで選択状態にするかを指定する.FilterIndex = 1
SelectedItemsユーザーが選択したアイテム(ファイル/フォルダ)のパスを取得する.SelectedItems(1)

InitialViewの定数一覧

InitialViewプロパティの設定には、以下の定数を指定する。

定数内容
msoFileDialogViewDatails詳細表示
msoFileDialogViewLargeIcons大きいアイコンで表示
msoFileDialogViewList一覧表示
msoFileDialogViewPreviewプレビューで表示
msoFileDialogViewPropertiesプロパティで表示
msoFileDialogViewSmallIcons小さいアイコンで表示
msoFileDialogViewThumbnail縮小表示

メソッド

FileDialogオブジェクトには1つだけメソッドを持っています。とても重要なメソッドですので覚えておきましょう。

メソッド内容
Showダイアログボックスを表示し、
キャンセルボタンが押されると「0」、
それ以外が選択されると「-1」を返す

具体例

実際のサンプルコードを解説します。

Private Sub btnImport_Click()

    Dim MyDialog As FileDialog
    Dim picked As String

    ' FilePickerでファイル取込の指定を行う
    Set MyDialog = Application.FileDialog(msoFileDialogFilePicker)

    With MyDialog
        .AllowMultiSelect = False
        .Title = "取込むExcelファイルを選択してください"
        .Filters.Clear
        .Filters.Add "Excelファイル", "*.xlsx; *.xls"
        .Filters.Add "すべてのファイル", "*.*"

        ' ---- ダイアログ表示 ----
        If .Show = -1 Then   ' OK が押されたとき
            picked = .SelectedItems(1)

            ' ---- インポート処理 ----
            DoCmd.TransferSpreadsheet _
                acImport, _
                acSpreadsheetTypeExcel12Xml, _
                "T_インポート先テーブル", _
                picked, _
                True

            MsgBox "インポートが完了しました!", vbInformation

        Else
            ' ---- キャンセル時 ----
            MsgBox "ファイルが選択されませんでした。処理を中止します。", vbExclamation
        End If
    End With
End sub

【解説】

3~4行目:
ダイアログボックスというオブジェクトを格納するための、オブジェクト変数MyDiaLogと、取得したファイルパスを格納するための、変数pickedをそれぞれ宣言します。

7行目:
本例ではファイルを選択するダイアログにするため、msoFileDialogFilePickerに設定したうえで、オブジェクト変数であるMyDialogに格納します。

9~14行目:
プロパティを指定することで、ダイアログボックスのタイトルや、選択可能なファイルの種類を「Excelファイルのみに限定する」といった設定を行っています。なお、これらのプロパティはWithステートメントを使うことで、本来であれば各プロパティの前に必要なMyDialog.を省略して記述できるようになっています。

17~18行目:
ダイアログボックスで [OK] または [キャンセル] をクリックすると、その結果がShow メソッドに -1(OK) または 0(キャンセル) として返されます。
IF文では、このShowの戻り値が -1(OK)の場合に処理を進め、SelectedItems(1) に格納されているファイルパスを変数pickedに代入します。

21~26行目
DoCmd.TransferSpreadsheetメソッドを使って、Excelデータをインポートします。
その引数 FileNameに変数pickedを指定することで、ダイアログボックスで取得したファイルパスをそのままインポート処理に利用できます。

DoCmd.TransferSpreadsheetの詳細については、こちらの記事で詳しく解説しています。

30~33行目:
キャンセルボタンをクリックした場合の処理です。メッセージボックスを表示し、処理を中断します。

注意点

FileDialogオブジェクトを使う場合は、VBEの参照設定で「Microsoft Office XX.X Object Library」を有効にする必要があります。有効になっているか事前に確認しておきましょう。
XX.X」部分は、使用している環境によって異なる場合があります。

参照設定

まとめ

データインポート時のファイル選択に使用するダイアログボックスの活用について、FileDialogオブジェクトの使い方を解説しました。

処理の流れは一見複雑ですが、
①プロパティ設定 → ②Showで表示 → ③SelectedItems で結果を取得
という一連の動作を意識すれば以外とシンプルであることをお分かりいただけると思います。

インポート機能はAccess ツールの中でも特に利用頻度が高い部分です。FileDialogを取り入れることで、操作性の向上はもちろん、メンテナンスや機能拡張もしやすくなりますので、ぜひ本記事を参考にしてみてください。


・Accessで業務用ツールを作ってみたいけど、なかなか時間がとれない。
・先輩が作った既存のツールを改修したいけど難しい…。
そのような場合には、私がみなさまの代わってカタチにいたします。ぜひ作成サービス
をご利用ください。

オーダーメイドのAccessツールをお作りします ふんわりした相談からでもOKです! | ココナラ
Accessに関する様々なご要望に対応いたします。日頃このようなお悩みやありませんか?✅業務用ツールの新規開発や改修が必要 ✅既存のAccessツールが使いに...
タイトルとURLをコピーしました