我有一个程序,该程序查看excel文件中的.dwg文件列表,一次打开一个图形,提取给定块引用的属性,然后将这些属性转储到原始excel文件中的新表中
这段代码在大约一半的时间里运行良好,所有数据都得到了说明并正确设置了格式,但是另一半我遇到了运行时错误9、91或462。
我将错误放在抛出错误的行中的括号中。
我的代码中是什么导致这些错误的?如果不是编程问题,那么为这些错误编写ErrorHandler的最佳方法是什么?
Set ExcelApp = GetObject(, "Excel.Application")
If ExcelApp Is Nothing Then
Set ExcelApp = CreateObject("Excel.Application")
If Not ExcelApp Then
ExcelApp.Workbooks.Open (tempName)
End If
End If
ExcelApp.DisplayAlerts = False
ExcelApp.Visible = False
Set wBook = ExcelApp.ActiveWorkbook
DoEvents
shtCount = wBook.Worksheets.Count ' ' (Error 91)
If shtCount <> 1 Then
DoEvents
wBook.Worksheets("Dump").Delete ' ' (Error 9, Despite that sheet existing)
DoEvents
End If
Set wSheet = wBook.Worksheets.Add(After:=Worksheets("DrawSheets")) ' ' (Error 462)
DoEvents
wSheet.Name = "Dump"
DoEvents
答案 0 :(得分:1)
第一次查看时,此代码块存在几个问题:
Set ExcelApp = GetObject(, "Excel.Application")
If ExcelApp Is Nothing Then
Set ExcelApp = CreateObject("Excel.Application")
If Not ExcelApp Then
ExcelApp.Workbooks.Open (tempName)
End If
End If
声明:
Set ExcelApp = GetObject(, "Excel.Application")
如果未打开Excel,将引发运行时错误;据推测,您的代码中包含On Error Resume Next
来绕过此错误,或者您可能在测试中打开了Excel。
如果Excel已打开,则您的代码将永远不会打开目标工作簿,因为该代码不会到达以下语句:
ExcelApp.Workbooks.Open (tempName)
此外,围绕上述表达式的if
语句没有任何意义:
If Not ExcelApp Then
ExcelApp.Workbooks.Open (tempName)
End If
在这里,您说的是:“如果ExcelApp评估为False,则使用它来打开工作簿”