Heenan, Lambert
Lambert.Heenan at chartisinsurance.com
Thu Feb 3 13:09:46 CST 2011
Cross posted to Access-L and AccessD
I have some code that has been running just find for years on end. It opens an Excel file and then does a quick check for the existence of a particular worksheet name in the file, as the first step to ensure that it is a correctly formatted file.
A correct file has two tabs, the first named "Data" and the other named "Values". Here is the code that all of a sudden does not work:
Dim xlObj As Excel.Application
Dim i as Integer
Dim bInvalidFile as Boolean
...
Set xlObj = Excel_OpenWorkBookHidden(mod_sExcelPath)
' opens the file with the standard automation methods*, see below
bInvalidFile = True
For i = 1 To xlObj.Worksheets.Count
' xlObj.Worksheets.Count evaluates to 2
If (xlObj.Worksheets(i).Name = "Values") Then
' when i = 1 the expression xlObj.Worksheets(i).Name evaluated to "Data", as expected
' but as soon as the Next i statement is executed xlObj.Worksheets(i).Name shows up in the
' Watch window as "Application-defined or object-defined error"
bInvalidFile = False
Exit For
End If
Next i '
I have a function that was written some time after the above problematic code which looks for a given tab name in an Excel file...
Function Excel_WorkSheetExists(xlApp As Excel.Application, strName As String) As Boolean
Dim xlWs As Excel.Worksheet
On Error Resume Next
Set xlWs = xlApp.Worksheets(strName)
Excel_WorkSheetExists = (Err.Number = 0)
Set xlWs = Nothing
On Error GoTo 0
End Function
When I call this function using a reference to the exact same file as was causing trouble above...
Set xlApp = Excel_OpenWorkBookHidden(strPORFile)
' now check for the presence of some worksheets...
boolHit = Excel_WorkSheetExists(xlApp, "Data")
If boolHit Then
boolHit = boolHit And Excel_WorkSheetExists(xlApp, "Values")
End If
... the function happily finds both the "Data" and the "Values" tab and returns True.
I am simply going to blink and replace the old For Loop at the top of this posting with a call to the Excel_WorkSheetExists function, which will get me past the problem, but I cannot for the life of me figure out what the problem might be with the old code that has work fine for so long.
* my method for opening the Excel file ...
70 If IsExcelRunning() Then
80 Set xlApp = GetObject(, "Excel.Application")
90 Else
100 Do
110 Set xlApp = CreateObject("Excel.Application")
120 Loop Until IsExcelRunning()
130 End If
Lambert ????