[AccessD] Excel object behavior

Michael R Mattys mmattys at rochester.rr.com
Mon Sep 22 21:05:12 CDT 2008


That is a spectacular find, Stuart ... the beating heart of VB/VBA
Why have I never seen this 'feature' discussed before?
When I look back now over the years ... lol!

Michael R. Mattys
MapPoint & Access Dev
www.mattysconsulting.com

----- Original Message ----- 
From: "Stuart McLachlan" <stuart at lexacorp.com.pg>
To: "Access Developers discussion and problem solving" 
<accessd at databaseadvisors.com>
Sent: Monday, September 22, 2008 9:37 PM
Subject: Re: [AccessD] Excel object behavior


> Don't know about Excel, but I've had a similar problem occur in Word. The 
> problem turned
> out to be using Unqualified References. It's explained at
> http://support.microsoft.com/kb/319832
>
> Here's an example from that page which illustrates your problem:
>
> <quote>
> Qualifying the Code to Avoid Errors
> The best guideline is to avoid using any Office object that you do not 
> explicitly call from a
> parent object that you set in a specific variable. In other words, look 
> for code that uses
> Office objects without qualifying which Office instance or document that 
> it is supposed to
> refer to. For example, this code uses an unqualified call to display the 
> count of open
> workbooks in Microsoft Excel:
>
> Sub CreateThreeBooks()
>   Dim oXL As Excel.Application
>   Dim i As Long
>
> ' Create Excel instance (make it visible for test)...
>   Set oXL = New Excel.Application
>   oXL.Visible = True
>
> ' Open a few empty workbooks...
>   For i = 1 To 3
>      oXL.Workbooks.Add
>   Next i
>
> ' How many books did we open?
>   MsgBox "Number of workbooks: " & Workbooks.Count, vbMsgBoxSetForeground
>
> ' Shutdown Excel (or do we?)...
>   oXL.Quit
>   Set oXL = Nothing
> ' Check the Processes list. Excel.exe is still running!
> End Sub
>
> When you run the code, it appears to run correctly the first time. 
> However, Excel continues
> to run, even though you called the Quit method. If you call the code 
> again, the message
> box now incorrectly displays 0 for the workbook count. Your code may now 
> fail where you
> would expect it to succeed.
>
> To resolve both problems, you must fully qualify the Workbooks object that 
> you reference
> for the count, as follows:
>
>   MsgBox "Number of workbooks: " & oXL.Workbooks.Count, 
> vbMsgBoxSetForeground
>
> </quote>
>
>
>> From: McGillivray, Don [IT]
>> Sent: Mon 9/22/2008 17:10
>> To: Access Developers discussion and problem solving
>> Subject: [AccessD] Excel object behavior
>>
>>
>> Hello, All
>>
>> I have a procedure that exports a bunch of data to Excel, and then
>> uses the Excel object model to manipulate the resulting spreadsheets
>> (creating pivot tables, applying formatting, and the like.)  Usually
>> it works as advertised, but some of my users are having a problem
>> where the UI freezes (or maybe it just appears to freeze).
>>
>> In trying to isolate the problem, I watched the effects of my code
>> carefully, and I notice that the Excel instance that I create in code
>> doesn't terminate until the procedure itself is finished.  This,
>> despite the fact that I have closed, quit, and set to nothing all
>> Excel related objects before the end of the procedure.  I know through
>> experience that failing to terminate Excel objects correctly leaves
>> the instance alive even at the end of the procedure.  So I assume that
>> I'm killing them correctly since the instance does indeed die.
>>
>> Can anybody tell me if I should expect to see the instance survive
>> until the end of the proc, or is there something else I ought to be
>> doing when I'm finished with Excel?
>>
>> Thanks!
>>
>> Don McGillivray
>>
> -- 
> Stuart Mclachlan
>
>
> -- 
> AccessD mailing list
> AccessD at databaseadvisors.com
> http://databaseadvisors.com/mailman/listinfo/accessd
> Website: http://www.databaseadvisors.com 




More information about the AccessD mailing list