VBA
CreateObject vs. GetObject
Szukaj…
Uwagi
Najprościej, CreateObject
tworzy instancję obiektu, podczas gdy GetObject
pobiera istniejącą instancję obiektu. Określenie, czy obiekt można utworzyć lub uzyskać, będzie zależeć od jego właściwości Instance . Niektóre obiekty to SingleUse (np. WMI) i nie można ich utworzyć, jeśli już istnieją. Inne obiekty (np. Excel) to MultiUse i pozwalają na uruchomienie wielu instancji jednocześnie. Jeśli instancja obiektu jeszcze nie istnieje i spróbujesz GetObject
, pojawi się następujący możliwy do wychwycenia komunikat: Run-time error '429': ActiveX component can't create object
.
GetObject wymaga obecności co najmniej jednego z tych dwóch opcjonalnych parametrów:
- Ścieżka - Variant (String): Pełna ścieżka, w tym pliku, pliku zawierającego obiekt. Ten parametr jest opcjonalny, ale klasa jest wymagana, jeśli ścieżka jest pominięta.
- Klasa - Wariant (ciąg): Ciąg reprezentujący formalną definicję obiektu (Application i ObjectType). Klasa jest wymagana, jeśli ścieżka jest pominięta.
CreateObject ma jeden wymagany parametr i jeden parametr opcjonalny:
- Klasa - Wariant (ciąg): Ciąg reprezentujący formalną definicję obiektu (Application i ObjectType). Klasa jest wymaganym parametrem.
- Nazwa serwera - wariant (ciąg): nazwa komputera zdalnego, na którym zostanie utworzony obiekt. Jeśli zostanie pominięty, obiekt zostanie utworzony na komputerze lokalnym.
Klasa zawsze składa się z dwóch części w postaci Application.ObjectType
:
- Aplikacja - nazwa aplikacji, której częścią jest obiekt. |
- Typ obiektu - typ tworzonego obiektu. |
Niektóre przykładowe klasy to:
- Word.Application
- Arkusz excel
- Scripting.FileSystemObject
Demonstrowanie GetObject i CreateObject
Zwraca referencję do obiektu dostarczonego przez składnik ActiveX.
Użyj funkcji GetObject, jeśli istnieje bieżąca instancja obiektu lub jeśli chcesz utworzyć obiekt z już załadowanym plikiem. Jeśli nie ma bieżącej instancji i nie chcesz, aby obiekt był uruchamiany z załadowanym plikiem, użyj funkcji 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