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:

  1. Ś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.
  2. 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:

  1. Klasa - Wariant (ciąg): Ciąg reprezentujący formalną definicję obiektu (Application i ObjectType). Klasa jest wymaganym parametrem.
  2. 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 :

  1. Aplikacja - nazwa aplikacji, której częścią jest obiekt. |
  2. Typ obiektu - typ tworzonego obiektu. |

Niektóre przykładowe klasy to:

  1. Word.Application
  2. Arkusz excel
  3. Scripting.FileSystemObject

Demonstrowanie GetObject i CreateObject

Funkcja MSDN-GetObject

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


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow