Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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.