Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Podsumowanie
W tym artykule omówiono różne zachowania występujące podczas korzystania z funkcji GetObject i CreateObject z różnymi wersjami aplikacja pakietu Office lication firmy Microsoft.
GetObject i CreateObject to funkcje udostępniane przez programy Microsoft Visual Basic i Microsoft Visual Basic for Applications (VBA). Jednak informacje te dotyczą również języka Microsoft Visual C++, jeśli traktujesz odwołania do obiektu GetObject jako wywołania interfejsu API GetActiveObject i odwołuje się do metody CreateObject jako wywołań interfejsu 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 metody GetObject, ale składnia zalecana dla aplikacja pakietu Office licacji firmy Microsoft jest następująca:
set xlApp = GetObject(, "Excel.Application")
Jeśli wystąpienie programu Microsoft Excel jest uruchomione po wykonaniu 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 czasu wykonywania, który można uwięzić:
Run-time error '429':
ActiveX component can't create object
Jeśli uruchomiono wiele wystąpień programu Microsoft Excel, funkcja GetObject dołącza je do uruchomionego wystąpienia. Jeśli zamkniesz pierwsze wystąpienie, kolejne wywołanie metody GetObject dołączy 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, następujący kod zostanie pomyślnie dołączony do tego wystąpienia, nawet jeśli nie jest to najwcześniejsze wystąpienie, które zostało uruchomione:
Set xlApp = GetObject("Book2").Application
CreateObject
Element CreateObject służy do uruchamiania nowego wystąpienia serwera usługi Automation. Na przykład:
set xlApp = CreateObject("Excel.Application")
W zależności od tego, czy serwer jest zaprojektowany jako SingleUse lub MultiUse, inny proces serwera może lub nie może zostać uruchomiony. Może to być ważne rozróżnienie podczas podejmowania decyzji, czy należy przymusowo zamknąć wystąpienie 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 pomocna dokumentacja podczas implementowania rozwiązania w pakiecie Microsoft Office. Wyświetla ona listę zachowań i atrybutów różnych wersji i aplikacji pakietu Microsoft Office, takich jak to, czy serwer domyślnie jest widoczny podczas uruchamiania, jeśli jest to SingleUse lub MultiUse, jeśli ma właściwość UserControl, jeśli ma metodę Quit i nazwę klasy dla jego okna głównego.
Aplikacje | Widoczna | Tworzenie wystąpienia | Ma kontrolę użytkownika | Has 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 |
Access 2000, 2002, 2003, 2007 | Nie. | SingleUse | Tak | Tak | OMain |
Projekt 98, 2000 | Nie. | Multiuse | Tak | Tak | JWinproj-WhimperMainClass |
Nazwa klasy okna głównego jest przydatna do wywoływania interfejsu API FindWindow, jeśli chcesz się dowiedzieć wygodnie, jeśli jakiekolwiek wystąpienie jest już uruchomione. Właściwość UserControl jest właściwością logiczną wskazującą, czy aplikacja serwera automatycznie zamyka się po wydaniu ostatniego odwołania (ustawiona na wartość nic). Metoda Quit umożliwia zastąpienie właściwości UserControl w przypadkach, gdy jest to konieczne (np. 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 aplikacja pakietu Office licacji 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 z tego miejsca. Inne identyfikatory ProgID, takie jak Excel.Sheet i Word.Document, są przeznaczone do użycia w ole (łączenie obiektów i osadzanie) i mogą powodować niespójne wyniki w przypadku użycia z elementem CreateObject. Korzystając z identyfikatora ProgID aplikacji, można uniknąć potencjalnych problemów, jawnie uruchamiając serwer dla usługi Automation (nie osadzając).
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 do użycia, 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 zamyka się odpowiednio, gdy użytkownik zamknie aplikację (ponieważ nie ma zaległych odwołań).
Uwaga W przypadku programu Word właściwość UserControl jest tylko do odczytu. Nie można ustawić wartości True lub False. Program Word zawsze pozostaje uruchomiony po wydaniu ostatniego odwołania.