WindowsAPIの「ShellExecute」関数を使って、もう1つのAccessデータベースを開くサンプルです。
ShellExecuteは、「ファイルタイプ(拡張子)に関連付けられたアプリケーションでファイルを開く」関数です。したがって、「.MDB」にはAccessが関連付けられているはずですので、Access本体(MSACCESS.EXE)のフルパスを指定する必要はなく、データベースファイルのパスを指定してやるだけで、Accessの起動とそのファイルのオープンを行うことができます。
まず標準モジュールに次のコードを記述します。"Declare"の前に"Private"を付けることによってフォームのモジュールにも記述できます。
Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
(ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, _
ByVal lpParameters As String, ByVal lpDirectory As String, _
ByVal nShowCmd As Long) As Long
Const SW_SHOWNORMAL = 1
続いて、もう1つのAccessデータベースを開く処理を実行するコマンドボタンなどに、次のようなコードを記述します。
Dim strDBPath As String
Dim lngRet As Long
'データベースファイルのパスを設定
strDBPath = """C:\My Documents\db1.MDB"""
'WinAPIを使って関連付けられたアプリケーションを起動
lngRet = ShellExecute(hWndAccessApp, "open", strDBPath, vbNullString, CurDir(), SW_SHOWNORMAL)
'返り値が32以下の場合はエラー
If lngRet <= 32 Then
MsgBox "データベースを開けませんでした!"
End If
ただし、この方法には次のようなデメリットや制約があります。
- 複数バージョンのAccessがインストールされていると、どのバージョンのAccessが起動するか分からない。
- 開いたデータベースをコントロールすることはできない
|