Hi
I have a routine that uses VBA to open a hidden occurence of Excel,
and do background computations.
However, in the event that the routine terminates abnormally, I have
not been able to find a way of closing this Hidden occurrence. I can
close any foreground instances without any problem, but the same
coding does not work for hidden occurences.
Code as below:-
Function fIsAppRunning(B yVal strAppName As String, _
Optional fActivate As Boolean) As Boolean
Dim lngH As Long, strClassName As String
Dim lngX As Long, lngTmp As Long
Const WM_USER = 1024
On Local Error GoTo fIsAppRunning_E rr
fIsAppRunning = False
Select Case LCase$(strAppNa me)
Case "excel": strClassName = "XLMain"
Case Else: strClassName = vbNullString
End Select
If strClassName = "" Then
lngH = apiFindWindow2( vbNullString, strAppName)
Else
lngH = apiFindWindow2( strClassName, vbNullString)
End If
If lngH <> 0 Then
apiSendMessage lngH, WM_USER + 18, 0, 0
lngX = apiIsIconic(lng H)
If lngX <> 0 Then
lngTmp = apiShowWindow(l ngH, SW_SHOWNORMAL)
End If
If fActivate Then
lngTmp = apiSetForegroun dWindow(lngH)
End If
fIsAppRunning = True
End If
fIsAppRunning_E xit:
Exit Function
fIsAppRunning_E rr:
fIsAppRunning = False
Resume fIsAppRunning_E xit
End Function
Function fCloseApp(lpCla ssName As String) As Boolean
Dim lngRet As Long, hWnd As Long, pID As Long
hWnd = apiFindWindow(l pClassName, vbNullString)
If (hWnd) Then
lngRet = apiPostMessage( hWnd, WM_CLOSE, 0, ByVal 0&)
Call apiGetWindowThr eadProcessId(hW nd, pID)
Call apiWaitForSingl eObject(pID, INFINITE)
fCloseApp = Not (apiIsWindow(hW nd) = 0)
End If
End Function
And then, to close the running instance in my process -
Do While fIsAppRunning(" excel")
Set xlApp = GetObject(, "Excel.Applicat ion")
If xlApp.Visible = True Then
fCloseApp ("XLMain")
End If
Set xlApp = Nothing
Loop
Any help would be appreciated
Thanks
Gary 1 5560
Hi
Hi
If you can close all open refs to objects in the excel
including the application object it should finish.
The code you use, and any variant which closes the hidden
excel, will likely give memory leaks and close other
instances of excel which might be running.
You can pick up excel which is already running using code
like
Const ERR_APP_NOTRUNN ING As Long = 429
On Error Resume Next
Set xlApp = GetObject(, "Excel.Applicat ion")
If Err = ERR_APP_NOTRUNN ING Then
Set xlApp = New Excel.Applicati on
End If
If using excel 2002 or earlier and closing excel manually
you should look at http://support.microsoft.com/kb/q187745/
if not already seen
-David
On 3 Dec 2004 00:44:15 -0800, ga*********@nhs .net (Gary Cobden) wrote: Hi
I have a routine that uses VBA to open a hidden occurence of Excel, and do background computations.
However, in the event that the routine terminates abnormally, I have not been able to find a way of closing this Hidden occurrence. I can close any foreground instances without any problem, but the same coding does not work for hidden occurences.
Code as below:-
Function fIsAppRunning(B yVal strAppName As String, _ Optional fActivate As Boolean) As Boolean Dim lngH As Long, strClassName As String Dim lngX As Long, lngTmp As Long Const WM_USER = 1024 On Local Error GoTo fIsAppRunning_E rr fIsAppRunning = False Select Case LCase$(strAppNa me) Case "excel": strClassName = "XLMain" Case Else: strClassName = vbNullString End Select
If strClassName = "" Then lngH = apiFindWindow2( vbNullString, strAppName) Else lngH = apiFindWindow2( strClassName, vbNullString) End If If lngH <> 0 Then apiSendMessage lngH, WM_USER + 18, 0, 0 lngX = apiIsIconic(lng H) If lngX <> 0 Then lngTmp = apiShowWindow(l ngH, SW_SHOWNORMAL) End If If fActivate Then lngTmp = apiSetForegroun dWindow(lngH) End If fIsAppRunning = True End If fIsAppRunning_ Exit: Exit Function fIsAppRunning_ Err: fIsAppRunning = False Resume fIsAppRunning_E xit End Function
Function fCloseApp(lpCla ssName As String) As Boolean
Dim lngRet As Long, hWnd As Long, pID As Long
hWnd = apiFindWindow(l pClassName, vbNullString) If (hWnd) Then lngRet = apiPostMessage( hWnd, WM_CLOSE, 0, ByVal 0&) Call apiGetWindowThr eadProcessId(hW nd, pID) Call apiWaitForSingl eObject(pID, INFINITE) fCloseApp = Not (apiIsWindow(hW nd) = 0) End If End Function
And then, to close the running instance in my process -
Do While fIsAppRunning(" excel") Set xlApp = GetObject(, "Excel.Applicat ion") If xlApp.Visible = True Then fCloseApp ("XLMain") End If Set xlApp = Nothing Loop
Any help would be appreciated
Thanks
Gary This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics |
by: IanW |
last post by:
I don't know if this is in the right place but..
I am writing a VB.Net Class Library which uses Excel to produce workbooks
If I create an instance of Excel and then close it I can get .NET to destroy the instance of Excel, however as soon as I try to add a workbook and then end then close Excel the instance will not close
Code is included below
Has anyone else experienced this
What is going wrong
Sub foo_Works(
Dim xl As...
|
by: Lorenzo Melato |
last post by:
Hi everyone,
I have a very strange problem.
If I open a .NET application from EXCEL using SHELL function, when I close
EXCEL, the EXCEL.EXE process remain active and I must close it by Task
manager.
If I open a normal application (I.E. Notepad.exe) in the same manner, I have
no problem.
|
by: Richie |
last post by:
I want to close excel application from C#, this is the piece of code I
am trying
"System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);"
GC.Collect();
It ain't working ! Any ideas please !!
Also tried excelApp.Quit();
This is fine, but on viewing "Task List" the application tab shows
"Excel.exe" running. And if I run the program again the message
|
by: Randy Wayne |
last post by:
I use a program that imports into Excel that requires that the workbook is
closed prior to the import.
How do you check to see if an Excel workbook is open, and then close the
workbook?
How do you then look to see if Excel is still running and then close it
(Excel.exe)?
I already know how to open an instance of Excel, use it, and then close it,
|
by: Stewart Allen |
last post by:
Hi there,
I've got some code to open up an Excel workbook but what I want is for the
code to pause until the Excel workbook is closed.
Sub EditWorkbook(strFile as String)
Dim xlApp As Excel.Application
Dim xlWorkBook As Excel.Workbook
Dim strPath As String
| |
by: David Berman |
last post by:
Hi, I've written an application to do a while bunch of Excel automation.
I open a file, scan through all the worksheets, extract data, and then I
try to close Excel. However, I can see that I'm not doing it
effectively. If I am debugging my app, and I kill the app before my app
exits, but after the call that should close excel, I still have an
excell process sitting around. After about 20 + of those stack up, you
start to feel it.
If I...
|
by: Wenke Ji |
last post by:
Hi
I open a Excel workbook using below API:
Set ExcelServer = CreateObject("EXCEL.Application")
Set TargetWorkbook = ExcelServer.Workbooks.Open
(CurrentBook)
Befor the programm exit , I use the below API:
TargetWorkbook.Save
TargetWorkbook.Close
|
by: Hendri Adriaens |
last post by:
Hi,
I'm trying to automate the creation of an excel file via COM. I copied my
code below. I read many articles about how to release the COM objects that I
create. The code below runs just fine and excel is closed. But there are
some commented lines:
//xlSeries.XValues = xlWs.get_Range("B2", "B4"); // makes com objects, but
which...
|
by: popsoftheyear |
last post by:
I'm trying to automate some very simple things in excel, but have run into a roadblock (using c++). To detect excel closing, I just monitor the Excel Process using WaitForSingleObject. In order to close it myself, I just call ExcelApp.Quit(). Really basic stuff. Only problem is - I need to release all dispatches to detect the Excel process closing, but I need those dispatches (at least the application one) in order to close excel myself. Am...
|
by: Hystou |
last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can effortlessly switch the default language on Windows 10 without reinstalling. I'll walk you through it.
First, let's disable language synchronization. With a Microsoft account, language settings sync across devices. To prevent any complications,...
|
by: Oralloy |
last post by:
Hello folks,
I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>".
The problem is that using the GNU compilers, it seems that the internal comparison operator "<=>" tries to promote arguments from unsigned to signed.
This is as boiled down as I can make it.
Here is my compilation command:
g++-12 -std=c++20 -Wnarrowing bit_field.cpp
Here is the code in...
| |
by: jinu1996 |
last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven tapestry of website design and digital marketing. It's not merely about having a website; it's about crafting an immersive digital experience that captivates audiences and drives business growth.
The Art of Business Website Design
Your website is...
|
by: Hystou |
last post by:
Overview:
Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows Update option using the Control Panel or Settings app; it automatically checks for updates and installs any it finds, whether you like it or not. For most users, this new feature is actually very convenient. If you want to control the update process,...
|
by: tracyyun |
last post by:
Dear forum friends,
With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each protocol has its own unique characteristics and advantages, but as a user who is planning to build a smart home system, I am a bit confused by the choice of these technologies. I'm particularly interested in Zigbee because I've heard it does some...
|
by: agi2029 |
last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing, and deployment—without human intervention. Imagine an AI that can take a project description, break it down, write the code, debug it, and then launch it, all on its own....
Now, this would greatly impact the work of software developers. The idea...
|
by: isladogs |
last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM).
In this session, we are pleased to welcome a new presenter, Adolph Dupré who will be discussing some powerful techniques for using class modules.
He will explain when you may want to use classes instead of User Defined Types (UDT). For example, to manage the data in unbound forms.
Adolph will...
|
by: 6302768590 |
last post by:
Hai team
i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated we have to send another system
| |
by: muto222 |
last post by:
How can i add a mobile payment intergratation into php mysql website.
| |