GetObject 関数

適用先
Access for Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

注

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 が長さ 0 の文字列 ("") の場合、GetObject は、指定された型の新しいオブジェクト インスタンスを返します。 pathname 引数を省略した場合、GetObject は指定された型の現在アクティブなオブジェクトを返します。 指定した種類のオブジェクトが存在しない場合は、エラーが発生します。

一部のアプリケーションでは、ファイルの一部をアクティブ化することができます。 ファイル名の末尾に感嘆符 (!) を追加し、その後にアクティブ化するファイルの一部を識別する文字列を続けます。 この文字列の詳しい作成方法については、オブジェクトを作成したアプリケーションのドキュメントを参照してください。

たとえば、描画アプリケーションでは、図面の複数のレイヤーがファイルに保存されている場合があります。 次のコードを使用して、 SCHEMA.CAD という図面内のレイヤーをアクティブ化できます。


Set LayerObject = GetObject("C:\CAD\SCHEMA.CAD!Layer3")

オブジェクトの クラスを指定しない場合、オートメーションは、指定したファイル名に基づいて、起動するアプリケーションとアクティブ化するオブジェクトを決定します。 ただし、一部のファイルは複数のクラスのオブジェクトをサポートしている場合があります。 たとえば、1 つの図面が Application オブジェクト、Drawing オブジェクト、Toolbar オブジェクトという 3 種類のオブジェクトをサポートし、すべてが同じファイルの部分である場合があります。 アクティブ化するファイル内のオブジェクトを指定するには、省略可能な class 引数を使用します。 次に例を示します。


Dim MyObject As Object
Set MyObject = GetObject("C:\DRAWINGS\SAMPLE.DRW", _
    "FIGMENT.DRAWING")

この例では、 FIGMENT は描画アプリケーションの名前であり、 DRAWING はそれがサポートするオブジェクトの種類の 1 つです。

オブジェクトがアクティブ化されたら、定義したオブジェクト変数を使用して、コード内でオブジェクトを参照します。 前の例では、オブジェクト変数 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 を表示したり、閉じたりします。 DetectExcel サブ プロシージャは、2 つの API 呼び出しを使用して Excel を検索し、実行されている場合は、実行中のオブジェクト テーブルに入力します。 Microsoft Excel がまだ実行されていない場合、 GetObject を初めて呼び出すとエラーが発生します。 この例では、エラーにより ExcelWasNotRunning フラグが True に設定されます。 GetObject の 2 番目の呼び出しでは、開くファイルを指定します。 Excel がまだ実行されていない場合は、2 回目の呼び出しによって Excel が起動され、指定されたファイル 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