Zachowanie getobject i createobject serwerów automatyzacji pakietu Office

Podsumowanie

W tym artykule omówiono różne zachowania występujące podczas korzystania z funkcji GetObject i CreateObject z różnymi wersjami aplikacji pakietu Microsoft Office.

GetObject i CreateObject to funkcje udostępniane przez programy Microsoft Visual Basic i Microsoft Visual Basic for Applications (VBA). Jednak informacje te mają również zastosowanie do Microsoft Visual C++, jeśli odwołania do obiektu GetObject są traktowane jako wywołania interfejsu API GetActiveObject i odwołuje się do obiektu CreateObject jako wywołań interfejsu API CoCreateInstanceAPI.

Więcej informacji

Getobject

Obiekt GetObject służy do dołączania do uruchomionego wystąpienia serwera automatyzacji. Istnieje kilka różnych sposobów wywoływania obiektu GetObject, ale składnia zalecana dla aplikacji pakietu Microsoft Office jest następująca:

set xlApp = GetObject(, "Excel.Application")

Jeśli wystąpienie programu Microsoft Excel jest uruchomione podczas wykonywania tego kodu, masz dostęp do modelu obiektów uruchomionego wystąpienia za pośrednictwem zmiennej xlApp. Jeśli żadne wystąpienie nie jest uruchomione, zostanie wyświetlony następujący komunikat o błędzie z możliwością pułapek w czasie wykonywania:

Run-time error '429':
ActiveX component can't create object  

Jeśli działa wiele wystąpień programu Microsoft Excel, funkcja GetObject dołącza się do wystąpienia, które zostało uruchomione jako pierwsze. Jeśli zamkniesz pierwsze wystąpienie, kolejne wywołanie polecenia GetObject zostanie dołączone do drugiego uruchomionego wystąpienia itd.

Możesz dołączyć do określonego wystąpienia, jeśli znasz nazwę otwartego dokumentu w tym wystąpieniu. Jeśli na przykład wystąpienie programu Excel jest uruchomione z otwartym skoroszytem o nazwie Book2, poniższy kod zostanie pomyślnie dołączony do tego wystąpienia, nawet jeśli nie jest to najwcześniejsze uruchomione wystąpienie:

Set xlApp = GetObject("Book2").Application

Createobject

Funkcja CreateObject służy do uruchamiania nowego wystąpienia serwera usługi Automation. Przykład:

set xlApp = CreateObject("Excel.Application")

W zależności od tego, czy serwer został zaprojektowany jako SingleUse, czy MultiUse, może zostać uruchomiony inny proces serwera. Może to być ważne rozróżnienie przy podejmowaniu decyzji, czy należy wymusić zamknięcie wystąpienia usługi Automation. Na przykład w przypadku serwera MultiUse, jeśli wystąpienie jest już uruchomione przed dołączeniem do niego, możesz uniknąć programowego zamykania serwera po zakończeniu automatyzacji.

Poniższa tabela służy jako przydatne odwołanie podczas implementowania rozwiązania w pakiecie Microsoft Office. Zawiera listę zachowań i atrybutów różnych wersji i aplikacji pakietu Microsoft Office, takich jak to, czy serwer domyślnie jest widoczny po uruchomieniu, jeśli jest to tryb SingleUse lub MultiUse, jeśli ma właściwość UserControl, jeśli ma metodę Quit, i nazwę klasy dla okna głównego.

Aplikacje Widoczne Wystąpień Ma kontrolę użytkownika Ma QuitClassName Nazwa klasy
Excel 97, 2000, 2002, 2003, 2007 Nie SingleUse Tak Tak XlMain
Word 97, 2000, 2002, 2003, 2007 Nie SingleUse Tak Tak OpusApp
PowerPoint 97 Nie Multiuse Nie Tak PP97FrameClass
PowerPoint 2000 Nie Multiuse Nie Tak PP9FrameClass
PowerPoint 2002 Nie Multiuse Nie Tak PP10FrameClass
PowerPoint 2003 Nie Multiuse Nie Tak PP11FrameClass
PowerPoint 2007 Nie Multiuse Nie Tak PP12FrameClass
Dostęp 97 Tak SingleUse Tak Tak OMain
Dostęp 2000, 2002, 2003, 2007 Nie SingleUse Tak Tak OMain
Projekt 98, 2000 Nie Multiuse Tak Tak JWinproj-WhimperMainClass

Nazwa głównej klasy okna jest przydatna do wywoływania interfejsu API FindWindow, gdy chcesz wygodnie sprawdzić, czy jakiekolwiek wystąpienie jest już uruchomione. Właściwość UserControl jest właściwością logiczną, która wskazuje, czy aplikacja serwera jest automatycznie zamykana po wydaniu ostatniego odwołania (ustaw na wartość nic). Metoda Quit umożliwia zastąpienie właściwości UserControl w przypadkach, w których jest to konieczne (na przykład gdy wystąpienie nie zostanie zamknięte po wydaniu ostatniego odwołania).

Ogólnie rzecz biorąc, firma Microsoft zaleca użycie nowego wystąpienia aplikacji pakietu Office zamiast dołączania do wystąpienia, którego może używać użytkownik. Najlepiej utworzyć wystąpienie przy użyciu identyfikatora ProgID aplikacji, a następnie otworzyć lub utworzyć nowe obiekty. Inne identyfikatory ProgID, takie jak Excel.Sheet i Word. Dokument itd. jest przeznaczony do użycia w systemie OLE (łączenie obiektów i osadzanie) i może dawać niespójne wyniki w przypadku użycia z funkcją CreateObject. Korzystając z identyfikatora ProgID aplikacji, można uniknąć potencjalnych problemów, jawnie uruchamiając serwer usługi Automation (a nie osadzania).

Po zakończeniu pracy z serwerem usługi Automation zwolnij wszystkie odwołania do niego i wywołaj metodę Quit (jeśli jest dostępna), aby serwer został zamknięty zgodnie z oczekiwaniami. Jeśli chcesz skonfigurować wystąpienie za pomocą usługi Automation, a następnie pozostawić je otwarte dla użytkownika, musisz ustawić właściwość UserControl na wartość TRUE, a następnie zwolnić wszystkie odwołania. Następnie serwer pozostaje uruchomiony (ponieważ właściwość UserControl ma wartość TRUE) i zostaje odpowiednio zamknięty, gdy użytkownik zamknie aplikację (ponieważ nie ma żadnych nierozstrzygniętych odwołań).

Uwaga W przypadku Word właściwość UserControl jest tylko do odczytu. Nie można ustawić wartości True lub False. Word zawsze działa po wydaniu ostatniego odwołania.