VBA в AutoCAD ошибки непоследовательно при ссылке на Excel - PullRequest
2 голосов
/ 10 апреля 2019

У меня есть программа, которая просматривает список файлов .dwg в ​​файле Excel, открывает чертежи по одному, извлекает свойства для заданных ссылок на блоки, а затем выгружает эти свойства в новый лист в исходном файле 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

1 Ответ

1 голос
/ 10 апреля 2019

При первом рассмотрении есть несколько проблем с этим блоком кода:

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, а затем использует его для открытия рабочей книги "

...