即効テクニック |
●概要● AccessではDevelopers Edition以外にはCommon Dialog Controlの開発ライセンスが付属していませんし、ExcelのGetOpenFileNameのようなAPIのラッパーも用意されていません。 しかし、逆に言えばExcelがインストールしてある環境ならば、Excelのメソッドを直接利用するという選択肢もありえます。 そこで、今回はExcelのGetOpenFileNameメソッドをAccessから使用する方法を説明します。 ●準備● 新規標準モジュールを作成し、以下のプロシージャを記述して下さい。 ●サンプルコード● Private Sub xlGetOpenFileName() Dim objXL As New Excel.Application Dim FileName() As Variant 'ファイル名 Dim i As Integer 'ループカウンタ 'ファイルを開くダイアログを開き、ファイル名を取得 FileName = _ objXL.GetOpenFileName("すべてのファイル(*.*),*.*", , , , True) 'ファイル名の配列を取得してイミディエイトウィンドウに表示 For i = 1 To UBound(FileName) Debug.Print FileName(i) Next '終了処理 objXL.Quit Set objXL = Nothing End Sub ●動作確認● サンプルxlGetOpenFileNameを実行しファイルを選択すると、イミディエイトウィンドウに選択したファイル名が表示されます。 ●詳細● サンプルでは全てのファイルを表示し、複数ファイルの選択を許す形でOfficeファイルダイアログを表示させています。 複数ファイルを選択した場合、戻り値は配列として返されます。ですから複数ファイルを選択する形の場合、戻り値をVariant型の変数で丸ごと受け取り、その後ループ処理等でファイル名を個別に取り出す必要があります。 また、このメソッドは単に「ファイル名を取得」するだけですから、そのファイル名をどう処理していくかは、他の部分のコーディングに依存しますので注意が必要です。 ●引数説明● ExcelのGetOpenFileNameメソッドの引数は以下の通りです。 object.GetOpenFileName(FileFilter, FilterIndex, Title, ButtonText, MultiSelect) FileFilter 省略可能なVariant型の値を使用します。 開くファイルの種類を指定する文字列(ファイルフィルタ文字列) とワイルドカードのペアを、必要な数だけ指定します。 ファイル フィルタ文字列とワイルドカードはカンマで区切り、 各ペアもカンマで区切って指定します。各ペアは[ファイルの種 類] ボックスのリストに表示されます。 1 つのファイル フィルタ文字列に複数のワイルドカードを対応 させるには、各ワイルドカードをセミコロンで区切ります。 (例) "Accessファイル (*.mdb; *.mde),*.mdb;*.mde" 省略すると "すべてのファイル (*.*),*.*" を指定したことにな ります。 FilterIndex 省略可能なVariant型の値を使用します。 引数 FileFilter で指定したフィルタ文字列の中で、何番目を既 定値とするかを指定します。 この引数を省略するか、FileFilterに含まれるフィルタ文字列の 数より大きい数値を指定すると、最初のフィルタ文字列が既定値 となります。 Title 省略可能なVariant型の値を使用します。 ダイアログのタイトルを指定します。 この引数を省略すると "ファイルを開く" になります。 ButtonText 省略可能なVariant型の値を使用します。 Macintosh のみ指定できます。 MultiSelect 省略可能なVariant型の値を使用します。 Trueを指定すると、複数のファイルを選択できます。 Falseを指定すると、1 つのファイルしか選択できません。 既定値は False です。