Accessの処理において、「EXCELやCSVファイルを指定する」というニーズがあります。
テキストボックスに直接入力やコピペによるファイル指定でも実現できますが、少々ユーザビリティが悪いですね。
そこで、ファイルダイアログを開いてファイルを指定する方法が便利です。

ファイルダイアログを開く画面イメージ
大体こんな感じのフォームをダイアログ形式で表示することが多いです。

ファイル名のテキストボックスの横にフォルダアイコンがあるボタンを配置します。
ファイルダイアログを開くための事前準備
ダイアログを開くにはFileObjectLibralyを使用します。
VBAからこのライブラリを利用できるように、参照設定を追加する必要があります。
VisualBasic画面の上部メニューのツール → 参照設定 の順で選択します。
「Microsft Office xx.x Object Library」 (xxはバージョン)にチェックを入れます。
この参照設定がなければコンパイルエラーとなります。

ファイルダイアログを開く
以下のコードを標準モジュールに貼り付けます。
'---------------------------------------------------------------------
'ファイル選択ダイアログ
'---------------------------------------------------------------------
Public Function getFileName(tmpFilePath As String) As String
Dim intret As Integer
With Application.FileDialog(msoFileDialogOpen)
'ダイアログのタイトルを設定
.Title = "ファイル選択ダイアログ"
'ファイルの種類(拡張子)を指定
.Filters.Clear
.Filters.Add "EXCELファイル", "*.xls, *.xlsx"
.Filters.Add "テキストファイル", "*.csv, *.tsv"
'ファイルの種類の初期値を設定
.FilterIndex = 1
'複数ファイル選択を許可しない
.AllowMultiSelect = False
'初期パスを設定
.InitialFileName = tmpFilePath
'ダイアログを表示
intret = .Show
If intret <> 0 Then
'ファイルが選択されたときフルパスを返り値に設定
getFileName = Trim(.SelectedItems.Item(1))
Else
'ファイルが選択されなければ長さゼロの文字列を返す
getFileName = ""
End If
End With
End Function
後は、先のフォームのファイル選択ボタンのクリックイベントでこのモジュールを呼び出すだけです。
この関数の引数はデフォルトのフォルダ名(初期表示させたいフォルダ名)です。
(例)me.txtファイル名=getFileName(“c:\”)
上記の例ではCドライブ直下がデフォルトのパスとしてファイルダイアログが表示されます。
デフォルトのパスを指定しなかった場合(引数が空文字””の場合)、マイドキュメントがデフォルトのパスになります。

このプログラムでは、以下のファイルを表示する設定になっています。
ファイルの種類 | ファイル拡張子 |
EXCELファイル | .xlsx, .xls |
テキストファイル | .csv, .tsv |
表示させるファイルの種類を追加・削除する場合は、プログラムの16~17行目を編集してください。
ファイルを選択してOKをクリックすると、ファイル選択ダイアログが閉じられ選択したファイルがフォームのファイル名テキストボックスにセットされます。
尚、キャンセルをクリックした場合はファイル名テキストボックスには何もセットされません。
コメント