PRB: Releasing Object Variable Does Not Close Microsoft ExcelLast reviewed: December 31, 1996Article ID: Q132535 |
The information in this article applies to:
SYMPTOMSThe CREATEOBJECT function can be used to create a reference to an instance of Microsoft Excel and assign that reference to a variable. However, releasing that variable does not cause the instance of Excel to quit. Inadvertently creating multiple instances of Excel can cause a variety of error messages, depending on the machine configuration and Windows version. These error messages include:
"Insufficient Memory" "Not enough memory" "Page Fault" RESOLUTIONIf you are running Microsoft Excel 5.0, use the following code to close all instances of Microsoft Excel:
PROCEDURE xlquit local llFlag ON ERROR llFlag = .F. && Exit loop llFlag = .T. DO WHILE llFlag y=GETOBJECT (,"Excel.Application") y.QUIT ENDDO ON ERROR && Set back to defaultIf you are using Microsoft Excel 7.0, use the following code:
PROCEDURE xlquit DECLARE LONG FindWindowA IN USER32 AS FindA STRING,STRING DECLARE LONG SendMessageA IN USER32 AS SendA LONG, LONG, LONG, LONG WM_USER = 1024 hwnd = FindA("XLMAIN", 0) DO WHILE hwnd > 0 WhatD= SendA(hwnd, WM_USER + 18, 0, 0) y=GETOBJECT (,"Excel.Application") y.QUIT hwnd = FindA("XLMAIN", 0) ENDDOThe code is different because of a change in behavior between Microsoft Excel 7.0 and Microsoft Excel 5.x. For more information, please see the following article in the Microsoft Knowledge Base.
ARTICLE-ID: Q147573 TITLE : PRB: Microsoft Excel Not Registered in Running Object TableNOTE: The DECLARE statements in the above example are case-sensitive and the functions must be called just as in the example.
STATUSThis behavior is by design.
MORE INFORMATION
Steps to Reproduce BehaviorRun the following code to create five instances of Microsoft Excel, none of which are visible:
FOR i = 1 to 5 x = CREATEOBJECT("Excel.Application") RELEASE x ENDFORReleasing the variable x does not terminate the instance of Microsoft Excel. To ensure that each instance is terminated, add the following command immediately before the RELEASE x command:
x.QuitTo test if an instance of Microsoft Excel exists use this function:
x=GETOBJECT(,"Excel.Application") && The first argument is emptyThis returns an OLE error if no instance of Microsoft Excel is in memory.
REFERENCESFor more information about the GETOBJECT function, please see the following article in the Microsoft Knowledge Base:
ARTICLE-ID: Q128994 TITLE : Behavior of GETOBJECT() with Excel and Word for Windows |
Additional reference words: 3.00 VFoxWin
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |