SYMPTOMS
The 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"
RESOLUTION
If 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 default
If 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)
ENDDO
The code is different because Microsoft Excel 95 contains a bug that
was corrected in later versions.
If you are using Microsoft Office 2000 or Microsoft Office XP change the following code:
WhatD= SendA(hwnd, WM_USER + 18, 0, 0)
to the following:
WhatD= SendA(hwnd, WM_ACTIVATEAPP, 0, 0)
For additional information, click the article number below
to view the article in the Microsoft Knowledge Base:
153025 FIX: Microsoft Excel 95 Doesn't Respond Correctly toGetObject
NOTE: The DECLARE statements in the above example are case-sensitive and
the functions must be called just as in the example.