言語

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

定義

COM オブジェクトへの参照を作成して返します。 CreateObjectを使用して、Visual Basic内のクラスのインスタンスを作成することはできません。ただし、これらのクラスが明示的に COM コンポーネントとして公開されている場合を除きです。

[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The COM object to be created cannot be statically analyzed and may be trimmed")]
[System.Runtime.Versioning.SupportedOSPlatform("windows")]
public static object CreateObject(string ProgId, string? ServerName = "");
public static object CreateObject(string ProgId, string? ServerName = "");
public static object CreateObject(string ProgId, string ServerName = "");
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The COM object to be created cannot be statically analyzed and may be trimmed")>]
[<System.Runtime.Versioning.SupportedOSPlatform("windows")>]
static member CreateObject : string * string -> obj
static member CreateObject : string * string -> obj
Public Function CreateObject (ProgId As String, Optional ServerName As String = "") As Object

パラメーター

ProgId
String

必須。 String。 作成するオブジェクトのプログラム ID。

ServerName
String

このフィールドは省略可能です。 String。 オブジェクトが作成されるネットワーク サーバーの名前です。 ServerNameが空の文字列 ("") の場合は、ローカル コンピューターが使用されます。

返品

COM オブジェクトへの参照を作成して返します。 CreateObjectを使用して、Visual Basic内のクラスのインスタンスを作成することはできません。ただし、これらのクラスが明示的に COM コンポーネントとして公開されている場合を除きです。

属性

例外

サーバーは使用できません

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

例

次の例では、CreateObject 関数を使用してMicrosoft Excel ワークシートを作成し、ワークシートをファイルに保存します。 この例を使用するには、このプログラムを実行するコンピューターにExcelをインストールする必要があります。 また、com>/c0> メニューの 参照 ダイアログ ボックスの Project タブ <からタイプ ライブラリへの参照を追加する必要があります。 タイプ ライブラリの名前は、コンピューターにインストールされているExcelのバージョンによって異なります。 たとえば、Microsoft Excel 2002 のタイプ ライブラリの名前は Microsoft Excel 10.0 オブジェクト ライブラリです。

Sub TestExcel()
    Dim xlApp As Microsoft.Office.Interop.Excel.Application
    Dim xlBook As Microsoft.Office.Interop.Excel.Workbook
    Dim xlSheet As Microsoft.Office.Interop.Excel.Worksheet

    xlApp = CType(CreateObject("Excel.Application"), 
                Microsoft.Office.Interop.Excel.Application)
    xlBook = CType(xlApp.Workbooks.Add, 
                Microsoft.Office.Interop.Excel.Workbook)
    xlSheet = CType(xlBook.Worksheets(1), 
                Microsoft.Office.Interop.Excel.Worksheet)

    ' The following statement puts text in the second row of the sheet.
    xlSheet.Cells(2, 2) = "This is column B row 2"
    ' The following statement shows the sheet.
    xlSheet.Application.Visible = True
    ' The following statement saves the sheet to the C:\Test.xls directory.
    xlSheet.SaveAs("C:\Test.xls")
    ' Optionally, you can call xlApp.Quit to close the workbook.
End Sub

注釈

COM コンポーネントのインスタンスを作成するには、 CreateObject によって返されるオブジェクトをオブジェクト変数に割り当てます。

Sub CreateADODB()
   Dim adoApp As Object
   adoApp = CreateObject("ADODB.Connection")
End Sub

返されたオブジェクトを格納するために使用するオブジェクト変数の型は、アプリケーションのパフォーマンスに影響する可能性があります。 As Object 句を使用してオブジェクト変数を宣言すると、任意の種類のオブジェクトへの参照を含めることができる変数が作成されます。 ただし、その変数を介したオブジェクトへのアクセスは 遅延バインドされます。つまり、バインディングはプログラムの実行時に発生します。 アプリケーションのパフォーマンスの低下など、遅延バインディングを回避する必要がある理由は多数あります。

オブジェクト変数を作成すると、プログラムのコンパイル時にバインディングという初期バインディングが発生します。 これを行うには、com メニューの 参照 ダイアログ ボックスの Project タブ <からオブジェクトのタイプ ライブラリへの参照を追加します。 次に、オブジェクトの特定の型のオブジェクト変数を宣言します。 ほとんどの場合、 Dim ステートメントとプライマリ相互運用機能アセンブリを使用してオブジェクトを作成する方が、 CreateObject 関数を使用するよりも効率的です。

アンマネージ コードの操作

もう 1 つの問題は、COM オブジェクトがアンマネージ コード (共通言語ランタイムの利点を持たないコード) を使用することです。 Visual Basicのマネージド コードと COM のアンマネージ コードの混在には、かなりの複雑さが伴います。 COM オブジェクトへの参照を追加すると、Visual Basicはそのライブラリのプライマリ相互運用機能アセンブリ (PIA) を検索します。見つかると、そのアセンブリが使用されます。 PIA が見つからない場合は、COM ライブラリ内の各クラスのローカル相互運用性クラスを含む相互運用性アセンブリが作成されます。 詳細については、「 .NET Framework アプリケーションでの COM 相互運用性」を参照してください。

通常は、可能な限り、厳密にバインドされたオブジェクトとプライマリ相互運用機能アセンブリを使用する必要があります。 次の例では、CreateObject 関数とMicrosoft Office オブジェクトを使用してデモを行います。 ただし、これらのオブジェクトは、適切なプライマリ相互運用機能アセンブリと共に使用すると、使いやすく、信頼性が高くなります。

リモート コンピューターでのオブジェクトの作成

リモート ネットワーク コンピューターでオブジェクトを作成するには、コンピューターの名前を ServerName 関数の CreateObject 引数に渡します。 この名前は、共有名のコンピューター名部分と同じです。"\\MyServer\Public" という名前の共有の場合、 ServerName は "MyServer" です。

Note

リモート ネットワーク コンピューターでアプリケーションにアクセスできるようにする方法の詳細については、COM のドキュメント (Microsoft Developer Networkを参照してください)。 アプリケーションのレジストリ キーの追加が必要になる場合があります。

次のコードは、 MyServerという名前のリモート コンピューターで実行されている Excel のインスタンスのバージョン番号を返します。

Sub CreateRemoteExcelObj()
    Dim xlApp As Object
    ' Replace string "\\MyServer" with name of the remote computer.
    xlApp = CreateObject("Excel.Application", "\\MyServer")
    MsgBox(xlApp.Version)
End Sub

リモート サーバー名が正しくない場合、または使用できない場合は、実行時エラーが発生します。

Note

オブジェクトの現在のインスタンスがない場合は、 CreateObject を使用します。 オブジェクトのインスタンスが既に実行されている場合は、新しいインスタンスが開始され、指定した種類のオブジェクトが作成されます。 現在のインスタンスを使用するか、アプリケーションを起動してファイルを読み込むには、 GetObject 関数を使用します。 オブジェクト自体が単一インスタンス オブジェクトとして登録されている場合、 CreateObject の実行回数に関係なく、オブジェクトのインスタンスは 1 つだけ作成されます。

フレームワーク オブジェクトの作成

CreateObject関数は、COM オブジェクトを作成する場合にのみ使用できます。 .NET Framework オブジェクトを作成するためのまったく同等のメカニズムはありませんが、Activator 名前空間の System には、ローカル オブジェクトまたはリモート オブジェクトを作成するメソッドが含まれています。 特に、 CreateInstance メソッドまたは CreateInstanceFrom メソッドが役立つ場合があります。

Important

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

適用対象

こちらもご覧ください