GetObject 関数

重要:  この記事は機械翻訳されています。機械翻訳についての「免責事項」をお読みください。この記事の英語版を参照するには、ここをクリックしてください。

注: 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 つのインスタンスのみが作成されます。単一インスタンスのオブジェクトの場合、長さ 0 の文字列 ("") 構文で呼び出されると、GetObject は常に同じインスタンスを返します。また、pathname 引数が省略された場合、エラーが発生します。Visual Basic で作成されたクラスに対する参照を取得するために GetObject を使用することはできません。

この例では、GetObject 関数を使用して特定の Microsoft Office Excel 2007 ワークシート (MyXL) に対する参照を取得しています。ワークシートの Application プロパティを使用して、Excel の表示、終了などの操作を行います。DetectExcel Sub プロシージャは 2 つの API 呼び出しを使用して Excel を検索し、実行中の場合は、Running Object テーブルに入力します。Microsoft Excel がまだ実行されていない場合、GetObject の 1 回目の呼び出しによってエラーが発生します。この例では、このエラーによって ExcelWasNotRunning フラグが True に設定されます。GetObject の 2 回目の呼び出しでは、開くファイルを指定します。Excel がまだ実行されていない場合は、2 回目の呼び出しで起動され、指定したファイル (mytest.xls) が示すワークシートに対する参照を返します。ファイルは指定した場所に存在する必要があります。存在しない場合、Visual Basic エラーの Automation エラーが生成されます。次のコード例では、指定したワークシートを含む 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

注: 機械翻訳についての免責事項: この記事の翻訳はコンピューター システムによって行われており、人間の手は加えられていません。マイクロソフトでは、英語を話さないユーザーがマイクロソフトの製品、サービス、テクノロジに関するコンテンツを理解するのに役立てるため、こうした機械翻訳を提供しています。記事は機械翻訳されているため、用語、構文、文法などに誤りがある場合があります。

スキルを磨く
トレーニングの探索
新機能を最初に入手
Office Insider に参加する

この情報は役に立ちましたか?

ご意見をいただきありがとうございます。

フィードバックをお寄せいただき、ありがとうございます。Office サポートの担当者におつなぎいたします。

×