AutoCAD 中的 VBA 在引用 Excel 时出现不一致的错误



我有一个程序,它查看 excel 文件中.dwg文件的列表,一次打开一个图形,提取给定块引用的属性,然后将这些属性转储到原始 excel 文件的新工作表中。

这段代码大约一半的时间运行良好,所有数据都得到了考虑并正确格式化,但另一半时间我得到运行时错误 9、91 或 462。

我将错误放在它们被抛出的行的括号中。

我的代码中是什么导致了这些错误,如果这不是编程问题,那么为这些错误编写错误处理程序的最佳方法是什么?

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

在第一次审查时,此代码块存在几个问题:

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,则使用它打开工作簿">

相关内容

  • 没有找到相关文章

最新更新