GetObject a CreateObject chování automatizačních serverů Office

Souhrn

Tento článek popisuje různé chování, ke kterým dochází při použití funkcí GetObject a CreateObject s různými verzemi aplikací Microsoft Office.

GetObject a CreateObject jsou funkce poskytované jazykem Microsoft Visual Basic a Microsoft Visual Basic for Applications (VBA). Informace však platí také pro Microsoft Visual C++, pokud s odkazy na GetObject pracujete jako s voláními rozhraní API GetActiveObject a odkazy na CreateObject jako volání CoCreateInstanceAPI.

Další informace

Getobject

GetObject se používá k připojení ke spuštěné instanci automatizačního serveru. Existuje několik různých způsobů, jak volat GetObject, ale syntaxe, která se doporučuje pro aplikace Microsoft Office, je následující:

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

Pokud je při spuštění tohoto kódu spuštěna instance Microsoft Excelu, máte přístup k objektovém modelu spuštěné instance prostřednictvím proměnné xlApp. Pokud není spuštěná žádná instance, zobrazí se následující zachytávatelná chybová zpráva za běhu:

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

Pokud je spuštěno více instancí aplikace Microsoft Excel, GetObject se připojí k instanci, která je spuštěna jako první. Pokud pak zavřete první instanci, další volání GetObject se připojí k druhé instanci, která byla spuštěna, a tak dále.

Pokud znáte název otevřeného dokumentu v této instanci, můžete se připojit ke konkrétní instanci. Pokud například běží instance Excelu s otevřeným sešitem s názvem Book2, připojí se k ní úspěšně následující kód, i když se nejedná o nejstarší spuštěnou instanci:

Set xlApp = GetObject("Book2").Application

Createobject

CreateObject se používá ke spuštění nové instance serveru Automation. Příklady:

set xlApp = CreateObject("Excel.Application")

V závislosti na tom, jestli je server navržený jako SingleUse nebo MultiUse, může nebo nemusí být spuštěn jiný proces serveru. To může být důležitý rozdíl při rozhodování, jestli byste měli instanci Služby Automation vynutit. Pokud je například u serveru MultiUse spuštěná instance před připojením k serveru, můžete se po dokončení automatizace vyhnout programovému vypnutí serveru.

Následující tabulka slouží jako užitečný odkaz při implementaci řešení v Microsoft Office. Obsahuje seznam chování a atributů různých verzí a aplikací Microsoft Office, například jestli je server při spuštění standardně viditelný, pokud je SingleUse nebo MultiUse, pokud má vlastnost UserControl, pokud má metodu Quit, a název třídy pro své hlavní okno.

Aplikace Viditelné Instance Má UserControl Má quitClassName Název třídy
Excel 97, 2000, 2002, 2003, 2007 Ne Jednopoužití Ano Ano XlMain
Word 97, 2000, 2002, 2003, 2007 Ne Jednopoužití Ano Ano OpusApp
PowerPoint 97 Ne Vícepoužití Ne Ano PP97FrameClass
PowerPoint 2000 Ne Vícepoužití Ne Ano TŘÍDA PP9FrameClass
PowerPoint 2002 Ne Vícepoužití Ne Ano TŘÍDA PP10FrameClass
PowerPoint 2003 Ne Vícepoužití Ne Ano PP11FrameClass
PowerPoint 2007 Ne Vícepoužití Ne Ano PP12FrameClass
Access 97 Ano Jednopoužití Ano Ano OMain
Access 2000, 2002, 2003, 2007 Ne Jednopoužití Ano Ano OMain
Project 98, 2000 Ne Vícepoužití Ano Ano JWinproj-WhimperMainClass

Název třídy hlavního okna je užitečný pro volání rozhraní FindWindow API, pokud chcete pohodlně zjistit, jestli už nějaká instance běží. Vlastnost UserControl je logická vlastnost, která označuje, jestli se serverová aplikace automaticky vypne při vydání posledního odkazu (na nic). Metoda Quit umožňuje přepsat vlastnost UserControl v případech, kdy je to nutné (například když se instance po uvolnění posledního odkazu nevypnou).

Společnost Microsoft obecně doporučuje, abyste místo připojení k instanci, kterou uživatel používá, použili novou instanci aplikace Office. Nejlepší je vytvořit instanci pomocí ID application ProgID a pak odtud otevřít nebo vytvořit nové objekty. Jiné identifikátory ProgID, například Excel.Sheet a Word. Dokument a tak dále jsou určeny pro použití v OLE (object linking and Embedding) a při použití s objektem CreateObject mohou poskytovat nekonzistentní výsledky. Pomocí ID progování aplikace se vyhnete potenciálním problémům tím, že explicitně spustíte server pro automatizaci (ne vkládání).

Po dokončení práce se serverem Automation uvolněte všechny odkazy na něj a zavolejte jeho metodu Quit (pokud je k dispozici), aby se server vypnul podle očekávání. Pokud chcete nakonfigurovat instanci prostřednictvím služby Automation a pak ji nechat otevřenou, aby ji uživatel použil, musíte nastavit vlastnost UserControl na hodnotu TRUE a pak uvolnit všechny odkazy. Server pak zůstane spuštěný (protože vlastnost UserControl má hodnotu TRUE) a při zavření aplikace uživatelem se odpovídajícím způsobem vypne (protože neexistují žádné nevyřízené odkazy).

Poznámka Pro Word userControl vlastnost je jen pro čtení. Nelze nastavit hodnotu True nebo False. Word vždy po vydání posledního odkazu zůstane spuštěný.