引用Excel时,VBA在AutoCAD错误中不一致

问题描述 投票:2回答:1

我有一个程序,它查看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
excel vba autocad
1个回答
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,则使用它来打开工作簿”

© www.soinside.com 2019 - 2024. All rights reserved.