Heenan, Lambert
Lambert.Heenan at chartisinsurance.com
Fri Nov 13 15:13:59 CST 2009
Edward,
I always open Excel files this way...
Function Excel_OpenWorkBookHidden(Path As String, Optional UpdateLinks As Boolean = False, Optional Password As String = "") As Excel.Application
Dim xlObj As Excel.Application
On Error GoTo Excel_OpenWorkBookHidden_err
Set xlObj = CreateObject("Excel.Application")
xlObj.Workbooks.Open Path, UpdateLinks, , , Password
Set Excel_OpenWorkBookHidden = xlObj
Excel_OpenWorkBookHidden_exit:
Exit Function
Excel_OpenWorkBookHidden_err:
'Insert your error reporting routine here
'
Set Excel_OpenWorkBookHidden = Nothing
Resume Excel_OpenWorkBookHidden_exit
End Function
Example usage:
Dim xLAp as Excel.Application
Set xLAp = Excel_OpenWorkBookHidden("X:\SomePath\SomeFile.xls")
And if you want the workbook visible...
Function Excel_OpenWorkBook(Path As String, Optional UpdateLinks As Boolean = False, Optional Password As String = "") As Excel.Application
Dim xlObj As Excel.Application
On Error GoTo Excel_OpenWorkBook_err
Set xlObj = Excel_OpenWorkBookHidden(Path, UpdateLinks, Password)
If xlObj.Name > "" Then xlObj.Visible = True
Set Excel_OpenWorkBook = xlObj
Excel_OpenWorkBook_exit:
Exit Function
Excel_OpenWorkBook_err:
'Insert your error reporting routine here
'
Set Excel_OpenWorkBook = Nothing
Resume Excel_OpenWorkBook_exit
End Function
Then to close an Excel file opened with the above routines...
Typically I work with worksheet objects, not workbooks, so somewhere in my code after opening an Excel file there will be one or more
Dim xlWs as Excel.WorkSheet
Set xlWs = xlQb.Sheets("Data")
...
And then to close everything down I use
Set xlWs = Nothing
Excel_CloseWorkBook xlWs
The code for Excel_CloseWorkBook is...
Sub Excel_CloseWorkBook(xlApp As Excel.Application, Optional bSaveChanges As Boolean = False)
Dim wb As Excel.Workbook
On Error Resume Next
If xlApp.Name > "" Then
End If
If Err.Number <> 0 Then Exit Sub
On Error GoTo 0
For Each wb In xlApp.Workbooks 'Close all open workbooks
wb.Close bSaveChanges
Next wb
xlApp.UserControl = False
Set xlApp = Nothing
End Sub
The line "xlApp.UserControl = False" seems to be crucial to the process (though I don't remember where I read about it) the property is supposed to be False for programmatically opened files, but it seems that setting it explicitly before closing seems to help.
I wonder if your code between the two lines
Set ExcelwBook = ExcelApp.Workbooks.Add
. . .
ExcelApp.DisplayAlerts = False
Is manipulating any worksheet objects that are not then set to Nothing?
Lambert
-----Original Message-----
From: accessd-bounces at databaseadvisors.com [mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Edward Zuris
Sent: Friday, November 13, 2009 2:58 PM
To: accessd at databaseadvisors.com
Subject: [AccessD] Problem with Access VBA makes Excel Orphan
Using the below code from an Access 2000 VBA application, once running these commands there is still an Excel job running in task manager.
The Excel orphan makes it impossible to run the VBA application recessively.
One clue is Excel will finally shut down if the Access 2000 VBA application / database is shutdown.
Any way to tell Excel to just shut down ?
Is there a work-a-round for this problem ?
Thanks.
Sincerely,
Edward Zuris.
-
=======================================================
====== .Quit code not closing Excel Application ======
Dim ExcelApp As Excel.Application
Dim ExcelwBook As Excel.Workbook
. . .
Set ExcelApp = New Excel.Application
Set ExcelwBook = ExcelApp.Workbooks.Add
. . .
ExcelApp.DisplayAlerts = False
ExcelwBook.SaveAs zPath & zName
ExcelApp.DisplayAlerts = True
ExcelwBook.Save
ExcelwBook.Close False
ExcelApp.Quit
Set ExcelwBook = Nothing
Set ExcelApp = Nothing
=======================================================
=======================================================
-
Yet a simpler VBA applications doesn't have this issue using the following.
This also fails using the complex VBA program.
Any ideas ?
=======================================================
= .Quit code Working closing simple Excel Application =
ExcelwBook.Application.DisplayAlerts = False
ExcelwBook.SaveAs zPath & zName
ExcelwBook.Application.DisplayAlerts = True
ExcelwBook.Application.Quit
ExcelApp.Quit
Set ExcelwBook = Nothing
Set ExcelApp = Nothing
=======================================================
=======================================================
--
AccessD mailing list
AccessD at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/accessd
Website: http://www.databaseadvisors.com