The Excel object probably is waiting for you to ask it if you want to save any unsaved changes but the dialog is not being displayed. If you set the saved property of the active workbook to true before you call the Quit event, that should clear things up.
m.loExcel.ActiveWorkbook.Saved= .T. && this prevents Excel prompt when we destroy the Excel object
Another thing you can try to do if you want to dig into why the Excel object is in an odd state is make it visible in your error handler before you call the quit event.
--
rk
-----Original Message----- From: ProfoxTech [mailto:profoxtech-bounces@leafe.com] On Behalf Of Mike Copeland Sent: Friday, June 10, 2016 5:28 PM To: profoxtech@leafe.com Subject: Re: Excel automation
Here's a snippit of code I have been using with great success recently. I wish I remembered where it came from but it is the best way to terminate a Windows application that I've found.
I use it to close the application if it is left running by the end user. It simply tests to see if the # of seconds since midnight is greater than a predefined # of seconds. For your need, I don't think you'd need the time check.
Hope this helps!
LOCAL loLocator, loWMI, loProcesses, loProcess, llIsRunning loLocator = CREATEOBJECT('WBEMScripting.SWBEMLocator') loWMI = loLocator.ConnectServer() loWMI.Security_.ImpersonationLevel = 3 loProcesses = loWMI.ExecQuery([SELECT * FROM Win32_Process WHERE Name = 'MyApplicationName.exe']) FOR EACH loProcess in loProcesses loProcess.Terminate(0) ENDFOR
Mike Copeland
rafael copquin wrote:
I've been using the following technique to open an instance of Excel for years:
If Upper(Vartype(Thisform.oExcel)) = "O" Thisform.oExcel.Quit Thisform.oExcel = null Else Thisform.AddProperty('oExcel') Endif
If Upper(Vartype(Thisform.oExcel)) <> "O" Thisform.oExcel=Createobject("Excel.Application") Else Thisform.oExcel=Getobject(,"Excel.Application") Endif
The above is taken from the Hacker's Guide
However, sometimes Excel throws an error. Therefore in my form class error method I put this construct:
If nError = 1426 && Excel error
If Vartype(thisform.oExcel ) = "O"
thisform.oExcel.quit Thisform.oExcel = null endifendif
Yet, it does not kill the Excel instance. I mean, the Excel instance is still open. It just does not go away. The only way to kill it is to open the task manager and kill it manually
I follow the Excel method step by step, and reproduce the error condition. The error method fires, the oExcel object exists, the line "thisform.oExcel.quit" executes, but it does not kill the Excel instance
????????
Rafael Copquin
[excessive quoting removed by server]