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ý.
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro