VBA
CreateObject vs. GetObject
Sök…
Anmärkningar
På det enklaste skapar CreateObject
en instans av ett objekt medan GetObject
får en existerande instans av ett objekt. Att bestämma om ett objekt kan skapas eller fås beror på egenskapen Instancing . Vissa objekt är SingleUse (t.ex. WMI) och kan inte skapas om de redan finns. Andra objekt (t.ex. Excel) är MultiUse och tillåter flera instanser att köras samtidigt. Om en förekomst av ett objekt inte redan existerar och du försöker GetObject
får du följande fällbara meddelande: Run-time error '429': ActiveX component can't create object
.
GetObject kräver att minst en av dessa två valfria parametrar är närvarande:
- Pathname - Variant (String): Hela sökvägen, inklusive filnamn, för filen som innehåller objektet. Denna parameter är valfri, men klass krävs om sökväg utelämnas.
- Klass - Variant (String): En sträng som representerar den formella definitionen (Application and ObjectType) av objektet. Klass krävs om sökväg utelämnas.
CreateObject har en nödvändig parameter och en valfri parameter:
- Klass - Variant (String): En sträng som representerar den formella definitionen (Application and ObjectType) av objektet. Klass är en obligatorisk parameter.
- Servername - Variant (String): Namnet på fjärrdatorn som objektet skapas på. Om utelämnas skapas objektet på den lokala maskinen.
Klassen består alltid av två delar i form av Application.ObjectType
:
- Applikation - Namnet på applikationen som objektet är en del av. |
- Objekttyp - Typen av objekt som skapas. |
Några exempelklasser är:
- Word.Application
- Exelblad
- Scripting.FileSystemObject
Demonstrera GetObject och CreateObject
Returnerar en referens till ett objekt som tillhandahålls av en ActiveX-komponent.
Använd GetObject-funktionen när det finns en aktuell instans av objektet eller om du vill skapa objektet med en fil som redan har laddats. Om det inte finns någon aktuell instans och du inte vill att objektet ska startas med en fil laddad använder du CreateObject-funktionen.
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