●概要●
VBAから他のActiveXオートメーションオブジェクトを参照するには、いくつかの方法が用意されています。
今回はファイル名から参照を設定するGetObject関数を説明します。
●準備●
「C:\My Documents」に「test.mdb」という新規のテスト用MDBを作成しておいて下さい。
続いて新規標準モジュールを作成し、以下のプロシージャを記述して下さい。
●サンプルコード●
Private Sub ControlComObj()
Dim appAC As Access.Application
'MDBファイルを指定して、新しいAccessを起動する
Set appAC = GetObject("C:\My Documents\test.mdb")
'新しいAccessを表示する
appAC.Visible = True
MsgBox appAC.CurrentDb.Name & vbCrLf & "を起動しました"
'新しいAccessを終了する
appAC.Quit
Set appAC = Nothing
End Sub
●詳細●
GetObject関数は「GetObject(Path, Class)」という構文になっています。
Path ファイルのフルパスです
Class オブジェクトのクラスを表す文字列を指定します。
どちらの引数も省略可能ですが、どのように省略するかによって結果が変わってきますので注意が必要です。
------------------------------------------------------------------------
Path Class 結果
------------------------------------------------------------------------
指定 指定 指定したファイルへの参照を返します
指定 省略 指定したファイルへの参照を返します
省略 指定 指定したクラスで、現在アクティブな(起動している)オブジェ
クトが返されます
指定したクラスのオブジェクトが起動していない時はエラー
になります
"" 指定 指定したクラスの新しいインスタンスへの参照が返されます
※ "" = 長さ0の文字列
------------------------------------------------------------------------
複数のインスタンスを作成できないオブジェクトの場合は、CreateObject関数を繰り返し実行しても、そのオブジェクトのインスタンスは 1 つしか作成されません。
また、ファイルへの参照が必ずしも該当クラスの最上位オブジェクト(Office製品はApplication)とはならないことにも注意が必要です。
例えばGetobjectでExcelファイルへの参照を作成する場合、Applicationオブジェクト型ではなく、WorkBookオブジェクト型の変数に対して代入を行う必要があります。もちろん総称Object型を使用すればこの問題は関係ありませんが、コードの可読性やメンテナンス性、速度面を考えて事前参照を行っておいたほうがベターです。
(別掲 「タイプライブラリのGUIDやバージョンを取得する」参照)
例1) エラーが出る
Dim objXL As Excel.Application
Set objXL = GetObject("C:\My Documents\test.xls")
例2) 成功
Dim objXL As Excel.WorkBook
Set objXL = GetObject("C:\My Documents\test.xls")