ACCESS VBA でダイアログボックスを使いたい時

ACCESS VBA でダイアログボックスを使いたい時に、Microsoft Office Object Library を参照設定で追加してApplication.FileDialog(msoFileDialogOpen) を用いた場合、作成側と仕様側でOFFICEのバージョンが異なると参照設定のエラーが発生する。エクセルの場合にはVBAによって差異を吸収できるが、Microsoft Office Object Libraryの場合には
難しそうだったので、Microsoft Office Object Libraryの使用はあきらめざるをえなくなった。かわりに、APIを用いて、
ダイアログを作成するようにした。

Private Sub cmdEM_Click()*********************************
‘オブジェクトへの参照を取得 – Excel
Dim strFolder As String
strFolder = DLookup(“[ファイルパス]”, “TB設定”)

GetFileName = API_GetFileName1(strFolder)

If GetFileName = “” Then
Exit Sub
Else
Set xls = CreateObject(“Excel.Application”)
Set wkb2 = xls.Workbooks.Add(template:=GetFileName)
End If

以下省略

標準モジュール********************************************
Function API_GetFileName1(myFolder) As String
‘WindowsAPI[ファイルを開く] ダイアログ ボックスを表示する

Dim msaof As MSA_OPENFILENAME, ReturnType As Integer, N As Integer

‘■■■ダイアログ ボックスのオプションを設定
‘★タイトルバーの文字列
msaof.strDialogTitle = “ファイルを指定してください”

‘★フィルの種類コンボの設定
msaof.strFilter = MSA_CreateFilterString _
(“データベース(*.mdb)”, “*.mdb;*mde”, “テキスト(*.txt)”, “*.txt”, “全てのファイル”, “*.*”)

‘★何を取得するか?◆開くダイアログ–フルパス→0, ホルダーパス→1, ファイル名のみ→2◆
‘★開くか?保存か?◆保存ダイアログ–フルパス→3, ホルダーパス→4, ファイル名のみ→5◆
ReturnType = 0

msaof.strInitialDir = myFolder ‘初期ディレクトリ,規定値はカレントディレクトリー
msaof.lngFilterIndex = 3 ‘ファイル種類コンボの何番目を最初に表示するか
‘msaof.strInitialFile = “” ‘ダイアログに表示される初期ファイル名
‘msaof.strInitialDir = “” ‘初期ディレクトリ
‘msaof.strDefaultExtension = “*.mdb” ‘拡張子を省いて記入した時自動的に付けられる拡張子
msaof.lngFlags = OFN_HIDEREADONLY ‘読み取り専用チェックボックス非表示
‘■■■設定はここまで

‘ダイアログボックスを開くルーチン
Select Case ReturnType
Case 3, 4, 5: MSA_GetSaveFileName msaof
Case Else: MSA_GetOpenFileName msaof
End Select

‘戻り値
Select Case ReturnType
Case 2, 5
API_GetFileName1 = Trim(msaof.strFileNameReturned)
Case 1, 4
For N = 1 To Len(Trim(msaof.strFullPathReturned))
If InStr(N, Trim(msaof.strFullPathReturned), “\”) = 0 Then Exit For
Next N
API_GetFileName1 = Left(Trim(msaof.strFullPathReturned), N – 1)
Case Else
API_GetFileName1 = Trim(msaof.strFullPathReturned)
End Select
End Function