ファイル名によってActiveXオブジェクトを操作する (GetObject関数)
  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")


Access97/2000



戻る


Excel Word Access VBA! モーグ