Interaction.GetObject メソッド
アセンブリ: Microsoft.VisualBasic (microsoft.visualbasic.dll 内)

Public Shared Function GetObject ( _ <OptionalAttribute> Optional PathName As String = Nothing, _ <OptionalAttribute> Optional Class As String = Nothing _ ) As Object
Dim PathName As String Dim Class As String Dim returnValue As Object returnValue = Interaction.GetObject(PathName, Class)
public static Object GetObject ( [OptionalAttribute] string PathName, [OptionalAttribute] string Class )
public: static Object^ GetObject ( [OptionalAttribute] String^ PathName, [OptionalAttribute] String^ Class )
public static Object GetObject ( /** @attribute OptionalAttribute() */ String PathName, /** @attribute OptionalAttribute() */ String Class )
戻り値
COM コンポーネントにより得られたオブジェクトへの参照を返します。

詳細については、Visual Basic のトピック「GetObject 関数 (Visual Basic)」を参照してください。
GetObject 関数を使用して、ファイルから COM コンポーネントのインスタンスを読み込みます。次の例を使って説明します。
このコードを実行すると、指定された PathName に関連付けられているアプリケーションが起動し、指定されたファイル内のオブジェクトがアクティブになります。
既定の動作PathName が長さ 0 の文字列 ("") の場合、GetObject は指定されたクラス型の新しいオブジェクト インスタンスを返します。PathName 引数を省略した場合、GetObject は Class で指定されているクラス型の、現在アクティブなオブジェクトを返します。指定された型のオブジェクトが存在しない場合は、エラーが発生します。
アプリケーションによっては、ファイルに関連付けられているサブオブジェクトをアクティブにできます。それには、ファイル名の末尾に感嘆符 (!) を追加し、その後にファイル内でアクティブにする部分を識別する文字列を記述します。この文字列を作成する方法については、オブジェクトを作成したアプリケーションのドキュメントを参照してください。
たとえば、描画アプリケーションでファイルに格納されている画像に複数のレイヤが含まれているとします。次のコードを使用することで、schema.cad という名前の画像に含まれているレイヤをアクティブにします。
オブジェクトの Class を指定しない場合、指定したファイル名に基づいて、起動するアプリケーションとアクティブにするオブジェクトが自動的に決定されます。ただし、複数のクラスのオブジェクトをサポートするファイルもあります。たとえば 1 つの画像で、Application オブジェクト、Drawing オブジェクト、Toolbar オブジェクトという 3 種類のオブジェクトをサポートし、3 つとも同一ファイルに含まれる場合があります。ファイル内でアクティブにするオブジェクトを指定するには、オプションの Class 引数を使用します。次の例を使って説明します。
この例では、Figment が描画アプリケーションの名前で、Drawing がサポートされるオブジェクトの種類の 1 つです。
オブジェクトをアクティブにした後、コード内で宣言したオブジェクト変数を使用してオブジェクトを参照します。前に示した例では、オブジェクト変数 drawObj を使用して新しいオブジェクトのプロパティとメソッドにアクセスしています。次の例を使って説明します。
drawObj.Line(9, 90) drawObj.InsertText(9, 100, "Hello, world.") drawObj.SaveAs("C:\Drawings\sample.drw")
![]() |
---|
オブジェクトの現在のインスタンスが存在している場合、または読み込まれたファイルを使ってオブジェクトを作成する場合には、GetObject 関数を使用します。現在のインスタンスが存在せず、読み込まれたファイルを使ってオブジェクトを実行しない場合は、CreateObject 関数 (Visual Basic) を使用します。 複数のインスタンスを作成できない ActiveX オブジェクトの場合は、CreateObject を何度呼び出しても、そのオブジェクトのインスタンスは 1 つしか作成されません。単一インスタンスのオブジェクトの場合、長さ 0 の文字列 ("") の構文を使って GetObject を呼び出すと、常に同じインスタンスが返されます。PathName 引数を省略すると、エラーが発生します。GetObject を使用しても、Visual Basic で作成されたクラスへの参照は取得できません。 |
![]() |
---|
GetObject 関数には、アンマネージ コード アクセス許可が必要です。ただし、部分的に信頼されている状況でこの許可を使用すると、プログラムの実行に影響を及ぼす場合があります。詳細については、SecurityPermission、コード アクセス許可 の各トピックを参照してください。 |

GetObject 関数を使用して特定の Microsoft Excel ワークシート (excelObj) への参照を取得する例を次に示します。ワークシートの Application プロパティを使用して、Excel の表示、終了、その他の操作を実行します。detectExcel プロシージャでは、2 回の API 呼び出しを使用して Excel を探し、Excel が動作していればランニング オブジェクト テーブルに入力します。Excel がまだ動作していない場合、最初に GetObject を呼び出したときにエラーが発生します。この例では、excelWasNotRunning フラグが True に設定されます。GetObject への 2 回目の呼び出しで、開くファイルを指定します。Excel がまだ実行されていない場合、2 回目の呼び出しで Excel が起動し、指定されたファイル test.xls で表されるワークシートへの参照が返されます。このファイルは指定された場所に置かれている必要があります。そうでない場合、FileNotFoundException がスローされます。次に、Excel および指定されたワークシートのウィンドウが表示されます。
この例では遅延バインディングを使用し、オブジェクトが Object 型の変数に割り当てられるため、Option Strict Off が必要です。Visual Studio の [プロジェクト] メニューで [参照の追加] ダイアログ ボックスを開き、[COM] タブから Excel タイプ ライブラリへの参照を追加する場合、Option Strict On を指定して、特定のオブジェクトの種類のオブジェクトを宣言できます。
' Declare necessary API routines. Declare Function findWindow Lib "user32.dll" Alias _ "FindWindowA" (ByVal lpClassName As String, _ ByVal lpWindowName As Long) As Long Declare Function sendMessage Lib "user32.dll" Alias _ "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, _ ByVal wParam As Long, ByVal lParam As Long) As Long
Sub getExcel() Dim excelObj As Object Dim excelWasNotRunning As Boolean ' Test to see if a copy of Excel is already running. On Error Resume Next ' GetObject called without the first argument returns a ' reference to an instance of the application. If the ' application is not already running, an error occurs. excelObj = GetObject(, "Excel.Application") If Err().Number <> 0 Then excelWasNotRunning = True Err().Clear() ' If Excel is running, enter it into the Running Object table. detectExcel() ' Set the object variable to refer to the file you want to use. excelObj = GetObject("c:\vb\test.xls") ' Show Excel through its Application property. Then show the ' window containing the file, using the Windows collection of ' the excelObj object reference. excelObj.Application.Visible = True excelObj.Parent.Windows(1).Visible = True ' Insert code to manipulate the test.xls file here. End Sub
Sub detectExcel() ' Procedure detects a running Excel and registers it. Const WM_USER As Long = 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 is 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
getExcel 関数を呼び出すと、Excel が既に動作しているかどうかを確認するチェックが行われます。Excel が動作していない場合、インスタンスが作成されます。
![]() |
---|
前に示した例では、単純化のために、XLMAIN という名前のウィンドウはすべて Microsoft Excel のインスタンスに属していると想定しています。不正な改変などによって起動された他のオブジェクトにより、同じ名前のウィンドウが作成された場合、Excel に向けて送ったメッセージがすべてそのウィンドウで受け取られます。実稼働環境で使用するアプリケーションでは、より厳密なテストを追加して、XLMAIN が本当に Excel に属しているかどうかを確認する必要があります。 |

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


Interaction クラス
Interaction メンバ
Microsoft.VisualBasic 名前空間
Exception
FileNotFoundException
その他の技術情報
GetObject 関数 (Visual Basic)
CreateObject 関数 (Visual Basic)
Declare ステートメント
Option Strict ステートメント
Weblioに収録されているすべての辞書からInteraction.GetObject メソッドを検索する場合は、下記のリンクをクリックしてください。

- Interaction.GetObject メソッドのページへのリンク