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 です。
|