即効テクニック |
●概要● VBAから他のActiveXオートメーションオブジェクトを参照するには、いくつかの方法が用意されています。 今回はクラス名から参照を設定するCreateObject関数を説明します。 ●準備● 新規標準モジュールを作成し、以下のプロシージャを記述して下さい。 ●サンプルコード● Private Sub ControlComObj() Dim appAC As Access.Application '新しいAccessを起動する Set appAC = CreateObject("Access.Application") '新しいAccessを表示する appAC.Visible = True MsgBox appAC.Name & vbCrLf & "を起動しました" '新しいAccessを終了する appAC.Quit Set appAC = Nothing End Sub ●詳細● CreateObject関数は「CreateObject(Class, [ServerName])」 Class 作成するオブジェクトのクラス名を指定します。 「AppName.ObjectType」という形で指定します。 ServerName オブジェクトを保存するネットワークサーバを指定します。 省略可能です。 主だったアプリケーションのクラス名を紹介しましょう。 --------------------------------------------------------------------- アプリケーション名 オブジェクトの種類 クラス名 --------------------------------------------------------------------- Access Application Access.Application CurrentData Access.CodeData Access.CurrentData CurrentProject Access.CodeProject Access.CurrentProject --------------------------------------------------------------------- Excel Application Excel.Application WorkBook Excel.WorkBook Excel.Chart Excel.Sheet --------------------------------------------------------------------- Word Application Word.Application Document Word.Document Grobal Word.Grobal --------------------------------------------------------------------- PowerPoint Application PowerPoint.Application --------------------------------------------------------------------- Outlook Application Outlook.Application --------------------------------------------------------------------- ※複数のバージョンのOffice製品が混在している環境では、必ずクラス名の最後にバージョン番号を付けて下さい。 例) Access.Application.9 (Access2000) Access.Application.8 (Access97) 複数のインスタンスを作成できないオブジェクトの場合は、CreateObject関数を繰り返し実行しても、そのオブジェクトのインスタンスは 1 つしか作成されません。 この関数を使用して新しいオブジェクトのインスタンスを変数に代入する場合、総称Object型の変数を使用することも出来ますが、出来るだけ事前参照した適切な型(例:Excel.Application)を使用するようにしましょう。 (別掲 「タイプライブラリのGUIDやバージョンを取得する」参照) また、CreateObject関数は常に対象オブジェクトの新しいインスタンスを作成しますので、すでに起動しているアプリケーションのインスタンスを取得したい時にはGetObject関数を使用するようにして下さい。 さらにNewキーワードを明示的に宣言することで新規インスタンスを作成する方法もあります。 例1) Dim objXL As New Excel.Application 例2) Dim objXL As Excel.Application Set objXL = New CreateObject("Excel.Application")