R
russian_hamlet
I have a simple MS Word macro that opens up MS Excel files, grabs
tables or graphs and inserts them into the MS Word file. It works fine
on my computer (MS Windows 2000, MS Office 2000 SP3) and some of my
colleagues' (MS Windows 2000 and one MS Windows XP, MS Office 2000
SP3), but produces a runtime error on others' (MS Windows XP, MS Office
2000 SP3).
On trying to .Close certain files, we get a "Server threw an exception"
error: -2147417851 (80010105) on some systems.
I can provide more detailed code if need be, but this is the framework
....
' ... Subroutine
Public objExcel As Excel.Application '... have tried late-binding, with
Object
Public objWorkbook As Excel.Workbook
Private ExcelRunning As Boolean
Sub HookExcelObject()
On Error GoTo ExcelNotRunning
ExcelRunning = True
Set objExcel = GetObject(, "Excel.Application")
Exit Sub
ExcelNotRunning:
ExcelRunning = False
Set objExcel = CreateObject("Excel.Application")
End Sub
Sub UnhookExcelObject()
If Not ExcelRunning Then
objExcel.Quit
End If
Set objExcel = Nothing
End Sub
' ... Main Module, behind a form
Call HookExcelObject
strFile = "c:\file_1.xls"
Set objWorkbook = objExcel.Workbooks.Open(FileName:=strFile,
Updatelinks:=False, ReadOnly:=True)
objWorkbook.Sheets(strSheet).Range(strRange).Copy
objWorkbook.Close SaveChanges:=False
strFile = "c:\file_2.xls"
Set objWorkbook = objExcel.Workbooks.Open(FileName:=strFile,
Updatelinks:=False, ReadOnly:=True)
objWorkbook.Sheets(strSheet).Range(strRange).Copy
objWorkbook.Close SaveChanges:=False ' <<< CRASH, BANG, WALLOP!
Set objWorkbook = Nothing
Call UnhookExcelObject
If I halt the code at the .Close line, I can probe the two objects
fine.
? TypeName(objExcel), TypeName(objWorkbook)
Application Workbook
? objExcel.ActiveWorkbook.Name, objWorkbook.ActiveSheet.Name
my_workbook.xls my_Sheet
objExcel.Visible = True
objWorkbook.Activate
objWorkbook.Close SaveChanges:=False
<BOOOOOOOM>
objWorkbook.Saved = True
objWorkbook.Close
<BOOOOOOOM>
objExcel.Visible = True
objWorkbook.Close(False)
<BOOOOOOOM>
Could this be a MS Window XP thing ?
Any possible pointers?
thanks
jON
tables or graphs and inserts them into the MS Word file. It works fine
on my computer (MS Windows 2000, MS Office 2000 SP3) and some of my
colleagues' (MS Windows 2000 and one MS Windows XP, MS Office 2000
SP3), but produces a runtime error on others' (MS Windows XP, MS Office
2000 SP3).
On trying to .Close certain files, we get a "Server threw an exception"
error: -2147417851 (80010105) on some systems.
I can provide more detailed code if need be, but this is the framework
....
' ... Subroutine
Public objExcel As Excel.Application '... have tried late-binding, with
Object
Public objWorkbook As Excel.Workbook
Private ExcelRunning As Boolean
Sub HookExcelObject()
On Error GoTo ExcelNotRunning
ExcelRunning = True
Set objExcel = GetObject(, "Excel.Application")
Exit Sub
ExcelNotRunning:
ExcelRunning = False
Set objExcel = CreateObject("Excel.Application")
End Sub
Sub UnhookExcelObject()
If Not ExcelRunning Then
objExcel.Quit
End If
Set objExcel = Nothing
End Sub
' ... Main Module, behind a form
Call HookExcelObject
strFile = "c:\file_1.xls"
Set objWorkbook = objExcel.Workbooks.Open(FileName:=strFile,
Updatelinks:=False, ReadOnly:=True)
objWorkbook.Sheets(strSheet).Range(strRange).Copy
objWorkbook.Close SaveChanges:=False
strFile = "c:\file_2.xls"
Set objWorkbook = objExcel.Workbooks.Open(FileName:=strFile,
Updatelinks:=False, ReadOnly:=True)
objWorkbook.Sheets(strSheet).Range(strRange).Copy
objWorkbook.Close SaveChanges:=False ' <<< CRASH, BANG, WALLOP!
Set objWorkbook = Nothing
Call UnhookExcelObject
If I halt the code at the .Close line, I can probe the two objects
fine.
? TypeName(objExcel), TypeName(objWorkbook)
Application Workbook
? objExcel.ActiveWorkbook.Name, objWorkbook.ActiveSheet.Name
my_workbook.xls my_Sheet
objExcel.Visible = True
objWorkbook.Activate
objWorkbook.Close SaveChanges:=False
<BOOOOOOOM>
objWorkbook.Saved = True
objWorkbook.Close
<BOOOOOOOM>
objExcel.Visible = True
objWorkbook.Close(False)
<BOOOOOOOM>
Could this be a MS Window XP thing ?
Any possible pointers?
thanks
jON