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")
|