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.
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla