Interaction.GetObject(String, String) メソッド

定義

COM コンポーネントによって提供されるオブジェクトへの参照を返します。

public static object GetObject(string PathName = default, string Class = default);
static member GetObject : string * string -> obj
Public Function GetObject (Optional PathName As String = Nothing, Optional Class As String = Nothing) As Object

パラメーター

PathName
String

オプション。 String。 取得するオブジェクトを含むファイルのフル パスと名前。 PathNameを省略した場合は、Classが必要です。

Class
String

PathNameが指定されていない場合は必須です。 String。 オブジェクトのクラスを表す文字列。 Class引数には、次の構文と部分があります。

appname.objecttype

[1|1]パラメーター

[1|2]説明

[2|1] appname

[2|2]必須。 String。 オブジェクトを提供するアプリケーションの名前です。

[3|1] objecttype

[3|2]必須。 String。 作成するオブジェクトの種類またはクラスです。

返品

COM コンポーネントによって提供されるオブジェクトへの参照。

例外

指定したクラス型のオブジェクトが存在しません。

指定したパスとファイル名を持つオブジェクトが存在しません。

次の例では、GetObject 関数を使用して、特定のMicrosoft Excel ワークシート (excelObj) への参照を取得します。 ワークシートの Application プロパティを使用して、Excelを表示したり、閉じたり、他のアクションを実行したりできます。 2 つの API 呼び出しを使用して、detectExcel プロシージャはExcelを検索し、実行中の場合は実行中のオブジェクト テーブルに入力します。 GetObject の最初の呼び出しでは、Excelがまだ実行されていない場合にエラーが発生します。この例では、excelWasNotRunning フラグが True に設定されます。 GetObjectの 2 番目の呼び出しでは、開くファイルを指定します。 Excelがまだ実行されていない場合、2 番目の呼び出しで開始され、指定したファイル test.xls で表されるワークシートへの参照が返されます。 ファイルは、指定した場所に存在する必要があります。それ以外の場合、Visual Basicは FileNotFoundException をスローします。 次に、コード例を使用すると、Excel と、指定したワークシートを含むウィンドウの両方が表示されます。

この例では、遅延バインディングを使用するため、 Option Strict Off が必要です。この場合、オブジェクトは Object型の変数に割り当てられます。 Visual Studioの [Project c1] メニューの [参照] ダイアログ ボックスの [COM タブからExcelタイプ ライブラリへの参照を追加する場合は、を指定し、特定のオブジェクト型のオブジェクトを宣言できます。

' Add Option Strict Off to the top of your program.
Option Strict Off
' Test to see if a copy of Excel is already running.
Private Sub testExcelRunning()
    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.
    Dim excelObj As Object = GetObject(, "Excel.Application")
    If Err.Number = 0 Then
        MsgBox("Excel is running")
    Else
        MsgBox("Excel is not running")
    End If
    Err.Clear()
    excelObj = Nothing
End Sub
Private Sub getExcel()
    Dim fileName As String = "c:\vb\test.xls"

    If Not My.Computer.FileSystem.FileExists(fileName) Then
        MsgBox(fileName & " does not exist")
        Exit Sub
    End If

    ' Set the object variable to refer to the file you want to use.
    Dim excelObj As Object = GetObject(fileName)
    ' Show Excel through its Application property. 
    excelObj.Application.Visible = True
    ' Show the window containing the file.
    Dim winCount As Integer = excelObj.Parent.Windows.Count()
    excelObj.Parent.Windows(winCount).Visible = True

    ' Insert additional code to manipulate the test.xls file here.
    ' ...

    excelObj = Nothing
End Sub

getExcel 関数を呼び出すと、Excelが既に実行されているかどうかを確認するチェックが行われます。 そうでない場合は、インスタンスが作成されます。

Important

わかりやすくするために、前の例では、XLMAIN というウィンドウがMicrosoft Excelのインスタンスに属していることを前提としています。 不正な改ざんによって起動された可能性のある別のオブジェクトがその名前のウィンドウを作成した場合、Excelを意図したすべてのメッセージを受信します。 運用環境に使用するアプリケーションでは、XLMAINが実際にExcelに属していることを確認するために、より厳密なテストを含める必要があります。

注釈

GetObject関数を使用して、COM コンポーネントのインスタンスをファイルから読み込みます。 次の例は、これを示しています。

Dim CADObject As Object
CADObject = GetObject("C:\CAD\schema.cad")

このコードを実行すると、指定した PathName に関連付けられているアプリケーションが起動され、指定したファイル内のオブジェクトがアクティブになります。

既定のケース

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

サブオブジェクトへのアクセス

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

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

layerObject = GetObject("C:\CAD\schema.cad!Layer3")

クラスの指定

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

Dim drawObj As Object
drawObj = GetObject("C:\Drawings\sample.drw", "Figment.Drawing")

前の例では、 Figment は描画アプリケーションの名前であり、 Drawing はサポートされているオブジェクトの種類の 1 つです。

オブジェクトの使用

オブジェクトがアクティブ化されたら、宣言したオブジェクト変数を使用してコードで参照します。 前の例では、オブジェクト変数 drawObjを使用して、新しいオブジェクトのプロパティとメソッドにアクセスします。 次の例は、これを示しています。

drawObj.Line(9, 90)
drawObj.InsertText(9, 100, "Hello, world.")
drawObj.SaveAs("C:\Drawings\sample.drw")

Note

オブジェクトの現在のインスタンスがある場合、またはファイルが読み込まれたオブジェクトを作成する場合は、 GetObject 関数を使用します。 現在のインスタンスがなく、ファイルを読み込んでオブジェクトを開始したくない場合は、 CreateObject 関数を使用します。

オブジェクト自体が ActiveX 単一インスタンス オブジェクトとして登録されている場合、 CreateObject 呼び出された回数に関係なく、オブジェクトのインスタンスは 1 つだけ作成されます。 単一インスタンス オブジェクトの場合、 GetObject は長さ 0 の文字列 ("") 構文で呼び出されると常に同じインスタンスを返し、 PathName 引数を省略するとエラーが発生します。 GetObject を使用して、Visual Basicで作成されたクラスへの参照を取得することはできません。

Important

GetObject関数にはアンマネージ コードのアクセス許可が必要です。これは、部分信頼の状況での実行に影響する可能性があります。 詳細については、「 SecurityPermission および コード アクセス許可」を参照してください。

適用対象

こちらもご覧ください