注: Microsoft Jet Expression Service がサンドボックス モードで実行されている場合 (安全でない可能性がある式の評価は行われません)、このトピックで説明する関数、メソッド、オブジェクト、またはプロパティは無効です。 サンドボックス モードの詳細については、ヘルプで "サンドボックス モード" を検索してください。
ActiveX コンポーネントから提供されたオブジェクトの参照を返します。
構文
GetObject([pathname ] [, class ] )
GetObject 関数の構文には、次の引数があります。
引数 |
説明 |
---|---|
pathname |
省略可能。 バリアント型 (文字列)。 取得するオブジェクトを含むファイルのフル パスと名前。 pathname を省略する場合は、class を指定する必要があります。 |
class |
省略可能。 バリアント型 (文字列)。 オブジェクトの クラス を表す文字列。 |
class 引数 には、構文 appname.objecttype が使用され、次の項目があります。
項目 |
説明 |
---|---|
appname |
必須。 バリアント型 (文字列)。 オブジェクトを提供するアプリケーションの名前です。 |
objecttype |
必須。 バリアント型 (文字列)。 作成するオブジェクトの種類またはクラスです。 |
解説
注: 次の例は、Visual Basic for Applications (VBA) モジュールでのこの関数の使用方法を示しています。 VBA の使用方法の詳細については、[検索] の横にあるドロップダウン リストで [開発者用リファレンス] を選び、検索ボックスに検索する用語を入力します。
GetObject 関数を使用してファイルから ActiveX オブジェクトにアクセスし、オブジェクトをオブジェクト変数に割り当てます。 Set ステートメントを使用して、GetObject から返されたオブジェクトをオブジェクト変数に割り当てます。 次に例を示します。
Dim CADObject As Object
Set CADObject = GetObject("C:\CAD\SCHEMA.CAD")
このコードを実行すると、指定した pathname に関連付けられたアプリケーションが起動され、指定したファイルのオブジェクトがアクティブ化されます。
pathname が長さ 0 の文字列 ("") の場合、GetObject は、指定した種類の新しいオブジェクト インスタンスを返します。 pathname 引数が省略された場合、GetObject は、指定した種類の現在アクティブなオブジェクトを返します。 指定した種類のオブジェクトが存在しない場合は、エラーが発生します。
一部のアプリケーションでは、ファイルの一部をアクティブ化することができます。 感嘆符 (!) ファイル名の末尾に付け、アクティブ化するファイルの部分を特定する文字列を続けます。 この文字列の詳しい作成方法については、オブジェクトを作成したアプリケーションのドキュメントを参照してください。
たとえば、描画アプリケーションでは、図面の複数のレイヤーがファイルに保存されている場合があります。 次のコードを使用して、SCHEMA.CAD という図面内のレイヤーをアクティブ化することができます。
Set LayerObject = GetObject("C:\CAD\SCHEMA.CAD!Layer3")
オブジェクトの class を指定しない場合、起動するアプリケーションとアクティブ化するオブジェクトは、指定したファイル名に基づいて自動的に決定されます。 ただし、一部のファイルは複数のクラスのオブジェクトをサポートしている場合があります。 たとえば、1 つの図面が Application オブジェクト、Drawing オブジェクト、Toolbar オブジェクトという 3 種類のオブジェクトをサポートし、すべてが同じファイルの部分である場合があります。 アクティブ化するファイルのオブジェクトを指定するには、オプションの class 引数を使用します。 次に例を示します。
Dim MyObject As Object
Set MyObject = GetObject("C:\DRAWINGS\SAMPLE.DRW", _
"FIGMENT.DRAWING")
この例で、FIGMENT は描画アプリケーションの名前、DRAWING はサポートするオブジェクトの種類のいずれかです。
オブジェクトがアクティブ化されたら、定義したオブジェクト変数を使用して、コード内でオブジェクトを参照します。 前の例では、オブジェクト変数 MyObject を使用して新しいオブジェクトのプロパティとメソッドにアクセスしています。 次に例を示します。
MyObject.Line 9, 90
MyObject.InsertText 9, 100, "Hello, world."
MyObject.SaveAs "C:\DRAWINGS\SAMPLE.DRW"
注: 現在のオブジェクト インスタンスがある場合、または既にファイルが読み込まれているオブジェクトを作成する場合は、GetObject 関数を使用します。 現在のインスタンスがなく、ファイルが読み込まれた状態でオブジェクトを起動しない場合は、CreateObject 関数を使用します。
オブジェクトが単一のインスタンスのオブジェクトとして登録されている場合は、CreateObject が実行される回数に関係なく、そのオブジェクトに 1 つのインスタンスのみが作成されます。 単一インスタンス オブジェクトでは、 GetObject は長さ 0 の文字列 ("") 構文で呼び出されると常に同じインスタンスを返し、 pathname 引数を省略するとエラーが発生します。 GetObject を使用して、Visual Basic で作成されたクラスへの参照を取得することはできません。
例
この例では 、GetObject 関数を使用して、特定の Excel ワークシート (MyXL) への参照を取得します。 ワークシートの Application プロパティを使用して Excel を表示し、閉じます。 2 つの API 呼び出しを使用して、DetectExcel Sub プロシージャは Excel を検索し、実行中の場合は実行中のオブジェクト テーブルに入力します。 GetObject の最初の呼び出しでは、Microsoft Excel がまだ実行されていない場合にエラーが発生します。 この例では、エラーにより ExcelWasNotRunning フラグが True に設定されます。 GetObject の 2 番目の呼び出しでは、開くファイルを指定します。 Excel がまだ実行されていない場合、2 番目の呼び出しで開始され、指定したファイル mytest.xls で表されるワークシートへの参照が返されます。 ファイルは、指定した場所に存在する必要があります。それ以外の場合は、Visual Basic エラーオートメーション エラーが生成されます。 次に、コード例を使用すると、Excel と、指定したワークシートを含むウィンドウの両方が表示されます。 最後に、以前のバージョンの Excel が実行されていない場合、コードでは Application オブジェクトの Quit メソッドを使用して Excel を閉じます。 アプリケーションが既に実行されている場合は、アプリケーションを閉じようとしません。 参照自体は、 Nothing に設定することで解放されます。
' Declare necessary API routines:
Declare Function FindWindow Lib "user32" Alias _
"FindWindowA" (ByVal lpClassName as String, _
ByVal lpWindowName As Long) As Long
Declare Function SendMessage Lib "user32" Alias _
"SendMessageA" (ByVal hWnd as Long,ByVal wMsg as Long, _
ByVal wParam as Long, _
ByVal lParam As Long) As Long
Sub GetExcel()
Dim MyXL As Object ' Variable to hold reference
' to Microsoft Excel.
Dim ExcelWasNotRunning As Boolean ' Flag for final release.
' Test to see if there is a copy of Microsoft Excel already running.
On Error Resume Next ' Defer error trapping.
' GetObject function called without the first argument returns a
' reference to an instance of the application. If the application isn't
' running, an error occurs.
Set MyXL = GetObject(, "Excel.Application")
If Err.Number <> 0 Then ExcelWasNotRunning = True
Err.Clear ' Clear Err object in case error occurred.
' Check for Microsoft Excel. If Microsoft Excel is running,
' enter it into the Running Object table.
DetectExcel
' Set the object variable to reference the file you want to see.
Set MyXL = GetObject("c:\vb4\MYTEST.XLS")
' Show Microsoft Excel through its Application property. Then
' show the actual window containing the file using the Windows
' collection of the MyXL object reference.
MyXL.Application.Visible = True
MyXL.Parent.Windows(1).Visible = True
Do manipulations of your file here.
' ...
' If this copy of Microsoft Excel was not running when you
' started, close it using the Application property's Quit method.
' Note that when you try to quit Microsoft Excel, the
' title bar blinks and a message is displayed asking if you
' want to save any loaded files.
If ExcelWasNotRunning = True Then
MyXL.Application.Quit
End IF
Set MyXL = Nothing ' Release reference to the
' application and spreadsheet.
End Sub
Sub DetectExcel()
' Procedure dectects a running Excel and registers it.
Const WM_USER = 1024
Dim hWnd As Long
' If Excel is running this API call returns its handle.
hWnd = FindWindow("XLMAIN", 0)
If hWnd = 0 Then ' 0 means Excel not running.
Exit Sub
Else
' Excel is running so use the SendMessage API
' function to enter it in the Running Object Table.
SendMessage hWnd, WM_USER + 18, 0, 0
End If
End Sub