VBA:AccessのFileDialogで[ファイルを開く]ダイアログボックスを表示し、複数のファイルを選択できるようにするサンプルプログラム

Access VBA

Access VBA:AccessのFileDialogで[ファイルを開く]ダイアログボックスを表示し、複数のファイルを選択できるようにするサンプルプログラム

AccessのFileDialogオブジェクトを使用して複数のファイルを選択できる[ファイルを開く]ダイアログボックスを表示して利用する方法について覚書します。

FileDialogオブジェクト使ったサンプルプログラム

FileDialogオブジェクトを利用した通常の[ファイルを開く]ダイアログボックスの表示に関するサンプルプログラムは、以下の記事を参照して下さい。

ちなみにFileDialogオブジェクトのヘルプには以下の記載がありますので、ここでのサンプルプログラムはMSサポート対象外となるので、使う際は自己責任でお願いします。

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

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

後述する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

複数のファイルを選択できる[ファイルを開く]ダイアログボックスの表示について

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オブジェクトの各種プロパティやプロパティに設定できる値とその内容等、詳細については以下の記事を参照。

以上、終わり!

(Visited 126 times, 95 visits today)

Posted by るーと