GetObject 関数 (Visual Basic)

更新 : 2007 年 11 月

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

Public Function GetObject( _
    Optional ByVal PathName As String = Nothing, _
    Optional ByVal [Class] As String = Nothing _
) As Object

パラメータ

パラメータ

説明

PathName

省略可能です。取得するオブジェクトが含まれているファイル名までの完全パスを文字列 (String) で指定します。PathName を省略するか、長さ 0 の文字列 ("") を指定した場合、Class は省略できません。

Class

PathName が省略されている場合は、必ず指定します。オブジェクトのクラスを表す文字列 (String) を指定します。Class の構文と指定項目は次のとおりです。

appname.objecttype

パラメータ説明
appname 必ず指定します。オブジェクトを提供するアプリケーションの名前を文字列 (String) で指定します。
objecttype 必ず指定します。作成するオブジェクトの型またはクラスを文字列 (String) で指定します。

例外

例外の種類

エラー番号

条件

Exception

429

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

FileNotFoundException

432

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

非構造化エラー処理を使用する Visual Basic 6.0 アプリケーションをアップグレードする場合は、"エラー番号" の列を参照してください(エラー番号を Number プロパティ (Err オブジェクト) と比較することもできます)。ただし、可能であれば、このようなエラー制御は Visual Basic の構造化例外処理の概要 に置き換えることを検討してください。

解説

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

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

このコード例が実行されると、指定された引数 PathName に対応するアプリケーションが起動し、指定されたファイルのオブジェクトがアクティブになります。

既定の動作

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

サブオブジェクトの使用

アプリケーションによっては、ファイルに関連付けられたサブオブジェクトをアクティブにできる場合もあります。これには、ファイル名の最後に感嘆符 (!) を付け、続けてアクティブにするファイルの部分を表す文字列を指定します。このような文字列を作成する方法については、オブジェクトを作成したアプリケーションのドキュメントを参照してください。

たとえば、描画のアプリケーションでは、1 つのファイルの複数のレイヤに描画を保存する場合があります。schema.cad という描画ファイルの 1 つのレイヤをアクティブにするコード例を次に示します。

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

クラスの指定

オブジェクトの Class が指定されていない場合は、指定されたファイル名を基に、オートメーションが起動するアプリケーションとアクティブにするオブジェクトを決定します。ただし、中には複数のクラスのオブジェクトをサポートしているファイルもあります。たとえば、1 つの描画で Application オブジェクト、Drawing オブジェクト、および Toolbar オブジェクトという 3 つの異なる型のオブジェクトをサポートし、3 つとも同一ファイルに含まれることがあります。ファイルのどのオブジェクトをアクティブにするかは、引数 Class で指定します。次に例を示します。

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

このコード例では、Figment が描画のアプリケーションの名前で、Drawing がそのアプリケーションによってサポートされるオブジェクトの種類です。

オブジェクトの使用

アクティブになったオブジェクトをコードで参照するには、宣言したオブジェクト変数を使います。上の例では、オブジェクト変数 drawObj を使って新規オブジェクトのプロパティとメソッドにアクセスします。次に例を示します。

drawObj.Line(9, 90)
drawObj.InsertText(9, 100, "Hello, world.")
drawObj.SaveAs("C:\Drawings\sample.drw")
e9waz863.alert_note(ja-jp,VS.90).gifメモ :

GetObject 関数は、オブジェクトの現在のインスタンスがある場合や、読み込んだファイルからオブジェクトを作成する場合に使います。現在のインスタンスがなく、ファイルを読み込んでもオブジェクトを開始しないときは、CreateObject 関数 (Visual Basic) 関数を使用します。

複数のインスタンスを作成できない ActiveX オブジェクトの場合は、CreateObject 関数を何度呼び出しても、そのオブジェクトのインスタンスは 1 つしか作成されません。単一インスタンス オブジェクトの場合、長さ 0 の文字列 ("") を指定して GetObject 関数を呼び出すと、常に同じインスタンスを返します。また、引数 PathName を省略すると、エラーになります。GetObject 関数では、Visual Basic で作成したクラスへの参照を取得できません。

e9waz863.alert_security(ja-jp,VS.90).gifセキュリティに関するメモ :

GetObject 関数にはアンマネージ コード アクセス許可が必要です。ただし、部分的に信頼されている状況でこの許可を使用すると、プログラムの実行に影響を及ぼす場合があります。詳細については、「SecurityPermission」および「コード アクセス許可」を参照してください。

オブジェクトの使用後は、そのオブジェクトのすべての参照を Nothing に設定します。これにより、ランタイムが COM コンポーネントを破棄できるようになります。

使用例

次の例では、Excel が実行中であるかどうかを GetObject 関数を使用して調べています。

' 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

GetObject 関数を使って、Microsoft Excel の特定のワークシートへの参照 (excelObj) を取得するコード例を次に示します。GetObject を呼び出すと、指定したファイル (test.xls) で表されるワークシートへの参照が返されます。次に、Excel を表示し、指定されたワークシートのウィンドウを表示するコード例を示します。

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

' Add Option Strict Off to the top of your program.
Option Strict Off
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

スマート デバイス開発者のためのメモ

この関数はサポートされていません。

必要条件

名前空間 : Microsoft.VisualBasic

モジュール : Interaction

**アセンブリ :**Visual Basic ランタイム ライブラリ (Microsoft.VisualBasic.dll)

参照

参照

CreateObject 関数 (Visual Basic)

Declare ステートメント

Option Strict ステートメント

Exception

FileNotFoundException