473,656 Members | 2,819 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

VBA to close an HIDDEN occurence of Excel

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
Nov 13 '05 #1
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


Nov 13 '05 #2

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

14
2700
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...
2
2087
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.
5
23167
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
8
4891
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,
0
1364
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
3
8367
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...
5
3031
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
10
8147
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...
1
2739
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...
0
8297
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,...
0
8816
Oralloy
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...
0
8717
jinu1996
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...
1
8498
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,...
0
8600
tracyyun
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...
0
7311
agi2029
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...
1
6162
isladogs
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...
1
2726
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
2
1930
muto222
by: muto222 | last post by:
How can i add a mobile payment intergratation into php mysql website.

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.