CreateObject 関数 (Visual Basic)

更新 : 2007 年 11 月

COM オブジェクトへの参照を作成して返します。CreateObject 関数を使って Visual Basic 内のクラスのインスタンスを作成するには、そのクラスを COM コンポーネントとして明示的に示す必要があります。

Public Shared Function CreateObject( _
   ByVal ProgId As String, _
   Optional ByVal ServerName As String = "" _
) As Object

パラメータ

  • ProgId
    必ず指定します。文字列型 (String) です。作成するオブジェクトのプログラム ID です。

  • ServerName
    省略可能です。文字列型 (String) です。オブジェクトが作成されるネットワーク サーバーの名前を指定します。引数 ServerName が空の文字列 ("") の場合、ローカル コンピュータが使用されます。

例外

例外の種類

エラー番号

条件

Exception

429

ProgId が見つかりません。または指定されていません。

または

ServerName が DnsValidateName 関数に失敗する場合の原因のほとんどは、63 文字より長いか、無効な文字が含まれているためです。

Exception

462

サーバーを利用できません。

FileNotFoundException

53

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

非構造化エラー処理を使用する Visual Basic 6.0 アプリケーションをアップグレードする場合は、「エラー番号」列を参照してください(エラー番号を Number プロパティ (Err オブジェクト) と照らし合わせます)。しかし、可能な限り、このエラー処理は Visual Basic の構造化例外処理の概要 で置き換えてください。

解説

COM コンポーネントのインスタンスを作成するには、CreateObject 関数の戻り値をオブジェクト変数に代入します。

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

戻り値の格納に使用するオブジェクト変数の型は、アプリケーションのパフォーマンスに影響する場合があります。As Object 句を使用してオブジェクト変数を宣言すると、任意の型のオブジェクトへの参照を含む変数が作成されます。ただし、その変数を経由したオブジェクトへのアクセスは、遅延バインディングであり、プログラムの実行時にバインディングされます。アプリケーションのパフォーマンス低下などのさまざまな理由から、遅延バインディングは使用しないことを推奨します。

プログラムがコンパイルされたときにバインディングする事前バインディングを行うオブジェクト変数を作成できます。このためには、[プロジェクト] メニューの [参照の追加] ダイアログ ボックスの [COM] タブで、オブジェクトのタイプ ライブラリへの参照を追加します。次に、オブジェクトの特定の型のオブジェクト変数を宣言します。ほとんどの場合、CreateObject 関数を使用するよりも、Dim ステートメントとプライマリ相互運用機能アセンブリを使用してオブジェクトを作成する方が効果的です。

アンマネージ コードへの対応

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

一般的には、できる限り、厳密にバインドされたオブジェクトとプライマリ相互運用機能アセンブリを使用する必要があります。CreateObject 関数を Microsoft Office オブジェクトと共に使用する例を次に示します。この例は、デモンストレーションのためだけに作成されています。ただし、これらのオブジェクトを、適切なプライマリ相互運用機能アセンブリと共に使用すると、より簡単でより信頼性が高まります。

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

コンピュータ名を CreateObject 関数の引数 ServerName に渡すことで、リモート ネットワークで接続されたコンピュータ上にオブジェクトを作成できます。コンピュータ名は、共有名のコンピュータ名の部分と同じです。つまり、共有名が "\\MyServer\Public" の場合は、ServerName は "MyServer" になります。

7t9k08y5.alert_note(ja-jp,VS.90).gifメモ :

アプリケーションをリモート ネットワーク コンピュータでアクセスできるようにする方法の詳細については、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

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

7t9k08y5.alert_note(ja-jp,VS.90).gifメモ :

オブジェクトの現在のインスタンスがない場合は CreateObject 関数を使用します。オブジェクトのインスタンスが既に実行中の場合は、新規インスタンスが起動し、指定した型のオブジェクトが作成されます。現在のインスタンスを使用する、またはアプリケーションを起動してファイルを読み込ませるには、GetObject 関数を使用します。複数のインスタンスを作成できないオブジェクトの場合は、何度 CreateObject 関数を実行しても、そのオブジェクトのインスタンスは 1 つしか作成されません。

Framework オブジェクトを作成する

CreateObject 関数は、COM オブジェクトの作成のみに使用できます。.NET Framework オブジェクトを作成するまったく同様の方法はありませんが、System 名前空間の Activator には、ローカルまたはリモート オブジェクトを作成するメソッドが含まれています。具体的には、CreateInstance メソッドまたは CreateInstanceFrom メソッドが使用できます。

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

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

使用例

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

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

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

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

必要条件

名前空間 : Microsoft.VisualBasic

モジュール : Interaction

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

参照

参照

GetObject 関数 (Visual Basic)

Dim ステートメント (Visual Basic)

Declare ステートメント

Exception

FileNotFoundException

Activator

CreateInstance

CreateInstanceFrom

その他の技術情報

.NET Framework アプリケーションにおける COM 相互運用性

アンマネージ コードとの相互運用