VBA
CreateObject versus GetObject
Zoeken…
Opmerkingen
In het eenvoudigste geval maakt CreateObject
een instantie van een object, terwijl GetObject
een bestaande instantie van een object krijgt. Bepalen of een object kan worden gemaakt of verkregen, is afhankelijk van de eigenschap Instancing . Sommige objecten zijn SingleUse (bijv. WMI) en kunnen niet worden gemaakt als ze al bestaan. Andere objecten (bijvoorbeeld Excel) zijn MultiUse en kunnen meerdere exemplaren tegelijk worden uitgevoerd. Als een exemplaar van een object nog niet bestaat en u GetObject
probeert, ontvangt u het volgende trappable bericht: Run-time error '429': ActiveX component can't create object
.
GetObject vereist dat ten minste een van deze twee optionele parameters aanwezig is:
- Padnaam - Variant (tekenreeks): het volledige pad, inclusief de bestandsnaam, van het bestand dat het object bevat. Deze parameter is optioneel, maar Klasse is vereist als Padnaam wordt weggelaten.
- Class - Variant (String): een tekenreeks die de formele definitie (Application en ObjectType) van het object vertegenwoordigt. Klasse is vereist als Padnaam wordt weggelaten.
CreateObject heeft één vereiste parameter en één optionele parameter:
- Class - Variant (String): een tekenreeks die de formele definitie (Application en ObjectType) van het object vertegenwoordigt. Klasse is een vereiste parameter.
- Servernaam - Variant (String): de naam van de externe computer waarop het object wordt gemaakt. Indien weggelaten, wordt het object op de lokale computer gemaakt.
Klasse bestaat altijd uit twee delen in de vorm van Application.ObjectType
:
- Toepassing : de naam van de toepassing waarvan het object deel uitmaakt. |
- Objecttype - Het type object dat wordt gemaakt. |
Enkele voorbeeldklassen zijn:
- Word.Application
- Excel blad
- Scripting.FileSystemObject
GetObject en CreateObject demonstreren
Retourneert een verwijzing naar een object van een ActiveX-component.
Gebruik de GetObject-functie wanneer er een huidige instantie van het object is of als u het object wilt maken met een bestand dat al is geladen. Als er geen huidige instantie is en u niet wilt dat het object wordt gestart met een geladen bestand, gebruikt u de functie 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