Delen via


GetObject- en CreateObject-gedrag van Office Automation-servers

Samenvatting

In dit artikel worden de verschillende gedragingen besproken die optreden wanneer u de functies GetObject en CreateObject gebruikt met verschillende versies van Microsoft Office-app lications.

GetObject en CreateObject zijn functies die worden geleverd door Microsoft Visual Basic en Microsoft Visual Basic for Applications (VBA). De informatie is echter ook van toepassing op Microsoft Visual C++ als u verwijzingen naar GetObject behandelt als aanroepen naar de GetActiveObject-API en verwijzingen naar CreateObject als aanroepen naar de CoCreateInstanceAPI.

Meer informatie

GetObject

GetObject wordt gebruikt om een actief exemplaar van een automatiseringsserver te koppelen. Er zijn verschillende manieren om GetObject aan te roepen, maar de syntaxis die wordt aanbevolen voor de Microsoft Office-app lications is als volgt:

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

Als een exemplaar van Microsoft Excel wordt uitgevoerd wanneer deze code wordt uitgevoerd, hebt u toegang tot het objectmodel van het actieve exemplaar via de xlApp-variabele. Als er geen exemplaar wordt uitgevoerd, ontvangt u het volgende ingesloten foutbericht:

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

Als er meerdere exemplaren van Microsoft Excel worden uitgevoerd, wordt GetObject gekoppeld aan het exemplaar dat als eerste wordt gestart. Als u vervolgens het eerste exemplaar sluit, wordt een andere aanroep van GetObject gekoppeld aan het tweede exemplaar dat is gestart, enzovoort.

U kunt een bijlage toevoegen aan een specifiek exemplaar als u de naam van een geopend document in dat exemplaar kent. Als een exemplaar van Excel bijvoorbeeld wordt uitgevoerd met een geopende werkmap met de naam Book2, wordt de volgende code gekoppeld aan dat exemplaar, zelfs als dit niet het vroegste exemplaar is dat is gestart:

Set xlApp = GetObject("Book2").Application

CreateObject

CreateObject wordt gebruikt om een nieuw exemplaar van een Automation-server te starten. Bijvoorbeeld:

set xlApp = CreateObject("Excel.Application")

Afhankelijk van of de server is ontworpen als SingleUse of MultiUse, kan een ander serverproces al dan niet worden gestart. Dit kan een belangrijk onderscheid zijn om te bepalen of u een Automation-exemplaar geforceerd moet afsluiten. Als een exemplaar bijvoorbeeld al wordt uitgevoerd voordat u deze koppelt, wilt u bijvoorbeeld voorkomen dat de server programmatisch wordt afgesloten wanneer u klaar bent met automatiseren.

De volgende tabel fungeert als een nuttige referentie bij het implementeren van een oplossing met Microsoft Office. Het bevat gedrag en kenmerken van de verschillende versies en toepassingen van Microsoft Office, zoals of de server standaard zichtbaar is bij het starten, als het SingleUse of MultiUse is, als het een UserControl-eigenschap heeft, als deze een methode Afsluiten heeft en de klassenaam voor het hoofdvenster.

Toepassing(en) Zichtbaar Instantiƫren Heeft UserControl Heeft QuitClassName Klassenaam
Excel 97, 2000, 2002, 2003, 2007 Nee SingleUse Ja Ja XlMain
Word 97, 2000, 2002, 2003, 2007 Nee SingleUse Ja Ja OpusApp
PowerPoint 97 Nee MultiUse Nr. Ja PP97FrameClass
PowerPoint 2000 Nee MultiUse Nr. Ja PP9FrameClass
PowerPoint 2002 Nee MultiUse Nr. Ja PP10FrameClass
PowerPoint 2003 Nee MultiUse Nr. Ja PP11FrameClass
PowerPoint 2007 Nee MultiUse Nr. Ja PP12FrameClass
Access 97 Ja SingleUse Ja Ja OMain
Access 2000, 2002, 2003, 2007 Nee SingleUse Ja Ja OMain
Project 98, 2000 Nee MultiUse Ja Ja JWinproj-WhimperMainClass

De naam van de klasse van het hoofdvenster is handig voor het aanroepen van de FindWindow-API wanneer u wilt weten of er al een exemplaar wordt uitgevoerd. De eigenschap UserControl is een booleaanse eigenschap die aangeeft of de servertoepassing automatisch wordt afgesloten wanneer de laatste verwijzing wordt vrijgegeven (ingesteld op niets). Met de methode Afsluiten kunt u de eigenschap UserControl overschrijven in gevallen waarin dit nodig is (bijvoorbeeld wanneer een exemplaar niet wordt afgesloten nadat de laatste verwijzing is vrijgegeven).

Over het algemeen raadt Microsoft u aan een nieuw exemplaar van een Office-app licatie te gebruiken in plaats van een instantie te koppelen die de gebruiker mogelijk gebruikt. U kunt het beste een exemplaar maken met behulp van de Toepassing ProgID en vervolgens nieuwe objecten daar openen of maken. Andere progID's, zoals Excel.Sheet en Word.Document, enzovoort, zijn bedoeld voor gebruik in OLE (Object linking and Embedding) en kunnen inconsistente resultaten opleveren wanneer ze worden gebruikt met CreateObject. Met behulp van de Application ProgID voorkomt u potentiƫle problemen door de server expliciet te starten voor Automation (niet insluiten).

Wanneer u klaar bent met de Automation-server, laat u al uw verwijzingen naar de server los en roept u de methode Afsluiten (indien beschikbaar) aan, zodat de server wordt afgesloten zoals verwacht. Als u een exemplaar via Automation wilt configureren en deze vervolgens open wilt laten voor gebruik door de gebruiker, moet u de eigenschap UserControl instellen op TRUE en vervolgens al uw verwijzingen vrijgeven. De server blijft actief (omdat de eigenschap UserControl TRUE is) en wordt op de juiste wijze afgesloten wanneer de gebruiker de toepassing sluit (omdat er geen openstaande verwijzingen zijn).

Opmerking Voor Word is de eigenschap UserControl alleen-lezen. Deze kan niet worden ingesteld op Waar of Onwaar. Word blijft altijd actief wanneer de laatste verwijzing wordt vrijgegeven.