PRB: Excel Automation Fails Second Time Code RunsID: Q178510
|
While running code that uses Automation to control Microsoft Excel, one of
the following errors may occur:
With Microsoft Excel 97 or Excel 2000, you receive the error:
-or-Run-time error '1004':
Method '<name of method>' of object '_Global' failed
With Microsoft Excel 95, you receive the error:Application-defined or object-defined error
-or-Run-time error '-2147023174'
OLE Automation error
Run-time error '462':
The remote server machine does not exist or is unavailable.
Visual Basic has established a reference to Excel due to a line of code that calls an Excel object, method, or property without qualifying it with an Excel object variable. Visual Basic does not release this reference until you end the program. This errant reference interferes with automation code when the code is run more than once.
Modify the code so that each call to an Excel object, method, or property is qualified with the appropriate object variable.
This behavior is by design.
To automate Microsoft Excel, you establish an object variable that usually
refers to the Excel Application or Workbook object. Other object variables
can then be set to refer to a Worksheet, a Range, or other objects in the
Microsoft Excel object model. When you write code to use an Excel object,
method, or property, you should always precede the call with the
appropriate object variable. If you do not, Visual Basic establishes its
own reference to Excel. This reference might cause problems when trying to
run the automation code multiple times. Note that even if the line of code
begins with the object variable, there may be a call to an Excel object,
method, or property in the middle of the line of code that is not preceded
with an object variable.
The following steps illustrate how to reproduce this problem, and how to
correct it.
Option Explicit
Private Sub Command1_Click()
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Add
Set xlSheet = xlBook.Worksheets("Sheet1")
xlSheet.Range(Cells(1, 1), Cells(10, 2)).Value = "Hello"
xlBook.Saved = True
Set xlSheet = Nothing
Set xlBook = Nothing
xlApp.Quit
Set xlApp = Nothing
End Sub
xlSheet.Range(Cells(1,1),Cells(10,2)).Value = "Hello"
to:
xlSheet.Range(xlSheet.Cells(1,1),xlSheet.Cells(10,2)).Value = "Hello"
For additional information, please see the following article in the
Microsoft Knowledge Base:
Q167223 Microsoft Office 97 Automation Help File Available on MSL
Additional query words: activex automation OLE
Keywords : kbinterop kbAutomation kbVBp kbVBp400 kbVBp500 kbVBp600 kbGrpDSO kbOffice2000 kbExcel97 kbVBA500 kbexcel2000
Version : WINDOWS:2000,4.0,5.0,6.0,7.0,7.0a,97; :
Platform : WINDOWS
Issue type : kbprb
Last Reviewed: June 8, 1999