GetObject and CreateObject are functions that are provided by Microsoft Visual Basic and Microsoft Visual Basic for Applications (VBA). However, the information is also applicable to Microsoft Visual C++ if you treat references to GetObject as calls to the GetActiveObject API, and references to CreateObject as calls to the CoCreateInstance API.
GetObjectGetObject is used to attach to a running instance of an automation server. There are a few different ways to call GetObject, but the syntax that is recommended for the Microsoft Office applications is as follows:
set xlApp = GetObject(, "Excel.Application")
ActiveX component can't create object
You can attach to a specific instance if you know the name of an open document in that instance. For example, if an instance of Excel is running with an open workbook named Book2, the following code attaches successfully to that instance even if it is not the earliest instance that was launched:
Set xlApp = GetObject("Book2").Application
CreateObjectCreateObject is used to start a new instance of an Automation server. For example:
set xlApp = CreateObject("Excel.Application")
The following table serves as a helpful reference when implementing a solution with Microsoft Office. It lists behaviors and attributes of the various versions and applications of Microsoft Office, such as whether the server defaults to being visible when launched, if it is SingleUse or MultiUse, if it has a UserControl property, if it has a Quit method, and the class name for its main window.
|Application(s)||Visible||Instancing||Has UserControl||Has Quit||ClassName|
|Excel 97, 2000, 2002, 2003, 2007||No||SingleUse||Yes||Yes||XlMain|
|Word 97, 2000, 2002, 2003, 2007||No||SingleUse||Yes||Yes||OpusApp|
|Access 2000, 2002, 2003, 2007||No||SingleUse||Yes||Yes||OMain|
|Project 98, 2000||No||MultiUse||Yes||Yes||JWinproj-WhimperMainClass|
The main window class name is helpful for calling the FindWindow API when you want to find out conveniently if any instance is already running. The UserControl property is a boolean property that indicates whether the server application automatically shuts down when its last reference is released (set to nothing). The Quit method allows you to override the UserControl property in cases where it is necessary (such as when an instance does not shut down after the last reference is released).
In general, Microsoft recommends that you use a new instance of an Office application instead of attaching to an instance that the user may be using. It is best create an instance by using the Application ProgID, and then open or create new objects from there. Other ProgIDs, such as Excel.Sheet and Word.Document, and so forth, are intended for use in OLE (Object linking and Embedding) and may give inconsistent results when used with CreateObject. By using the Application ProgID, you avoid potential issues by explicitly starting the server for Automation (not Embedding).
When you are finished with the Automation server, release all your references to it and call its Quit method (if available) so that the server shuts down as expected. If you want to configure an instance through Automation and then leave it open for the user to use, you need to set the UserControl property to TRUE and then release all your references. The server then stays running (because the UserControl property is TRUE) and shuts down appropriately when the user closes the application (because there are no outstanding references).
Note For Word, the UserControl property is read-only. It cannot be set to True or False. Word always remains running when the last reference is released.
ID do Artigo: 288902 - Última Revisão: 23 de mar de 2009 - Revisão: 1