VBA
CreateObjectとGetObject
サーチ…
備考
CreateObject
はオブジェクトのインスタンスを作成するのが最も簡単GetObject
が、 GetObject
はオブジェクトの既存のインスタンスを取得します。オブジェクトの作成または取得の可否の決定は、インスタンス化プロパティによって異なります 。一部のオブジェクトはSingleUse(例:WMI)で、すでに存在する場合は作成できません。他のオブジェクト(Excelなど)はMultiUseであり、複数のインスタンスを一度に実行できます。オブジェクトのインスタンスが存在せずGetObject
を実行しようとすると、次のトラップ可能なメッセージが表示されます。 Run-time error '429': ActiveX component can't create object
。
GetObjectには、次の2つのオプションパラメータの少なくとも1つが必要です。
- Pathname - Variant(String):オブジェクトを含むファイルのフルパス(filenameを含む)。このパラメータはオプションですが、 Pathnameが省略されている場合はClassが必要です。
- Class - Variant(String):オブジェクトの正式な定義(ApplicationおよびObjectType)を表す文字列。 Pathnameを省略すると、 クラスが必要です。
CreateObjectには、1つの必須パラメータと1つのオプションパラメータがあります。
- Class - Variant(String):オブジェクトの正式な定義(ApplicationおよびObjectType)を表す文字列。 クラスは必須パラメータです。
- Servername - Variant(String):オブジェクトが作成されるリモートコンピュータの名前。省略した場合、オブジェクトはローカルマシン上に作成されます。
クラスは常にApplication.ObjectType
の形式で2つの部分で構成されていApplication.ObjectType
。
- アプリケーション - オブジェクトが含まれているアプリケーションの名前。 |
- Object Type - 作成されるオブジェクトのタイプ 。 |
いくつかのクラスの例は次のとおりです。
- Word.Application
- Excel.Sheet
- Scripting.FileSystemObject
GetObjectとCreateObjectのデモンストレーション
ActiveXコンポーネントによって提供されるオブジェクトへの参照を返します。
オブジェクトの現在のインスタンスがある場合、または既にロードされたファイルを使用してオブジェクトを作成する場合は、GetObject関数を使用します。現在のインスタンスがなく、ファイルをロードしてオブジェクトを開始したくない場合は、CreateObject関数を使用します。
Sub CreateVSGet()
Dim ThisXLApp As Excel.Application 'An example of early binding
Dim AnotherXLApp As Object 'An example of late binding
Dim ThisNewWB As Workbook
Dim AnotherNewWB As Workbook
Dim wb As Workbook
'Get this instance of Excel
Set ThisXLApp = GetObject(ThisWorkbook.Name).Application
'Create another instance of Excel
Set AnotherXLApp = CreateObject("Excel.Application")
'Make the 2nd instance visible
AnotherXLApp.Visible = True
'Add a workbook to the 2nd instance
Set AnotherNewWB = AnotherXLApp.Workbooks.Add
'Add a sheet to the 2nd instance
AnotherNewWB.Sheets.Add
'You should now have 2 instances of Excel open
'The 1st instance has 1 workbook: Book1
'The 2nd instance has 1 workbook: Book2
'Lets add another workbook to our 1st instance
Set ThisNewWB = ThisXLApp.Workbooks.Add
'Now loop through the workbooks and show their names
For Each wb In ThisXLApp.Workbooks
Debug.Print wb.Name
Next
'Now the 1st instance has 2 workbooks: Book1 and Book3
'If you close the first instance of Excel,
'Book1 and Book3 will close, but book2 will still be open
End Sub
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow