Ошибка при попытке использовать блоки Try-Catch в Excel VBA для получения внутренних исключений - PullRequest
0 голосов
/ 13 февраля 2019

Я работаю через Excel и VBA.Я пытаюсь получить внутреннее исключение из исключения автоматизации, но для начала мне нужно заставить блоки catch работать в первую очередь.Похоже, я точно повторил синтаксис из документации Microsoft.Вот код:

Try
    Set sm = CreateObject("SpectrumManager.Application")
Catch ex As Exception
    MsgBox ("Can't Create Object") 'placeholder
    'I want to get the inner exception from ex here
End Try

Сообщение об ошибке в конце попытки выглядит так: «Ожидается: Если или Выберите или Sub или Функция или Свойство или Тип или С или Enum или конец оператора» Сообщение об ошибке вПодвох заключается в следующем: «Ожидается: конец заявления»

Что я делаю не так?Спасибо за помощь заранее.редактировать: теперь я понимаю, что VBA не поддерживает блоки try-catch.Это приводит меня к вопросу, есть ли способ получить внутреннее исключение из исходного исключения, которое было отправлено?Или эта информация теряется, когда она преобразуется в ошибку VBA?

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Для тех, кто желает рассматривать коммерческую стороннюю компанию в качестве опций, есть возможность купить vbWatchDog , которая позволяет использовать шаблон Try / Catch с VBA.Возможный образец:

Public Sub Derp(Faceplant As Boolean)
  If Faceplant = False Then
    ErrEx.DoFinally
  End If

  Debug.Print 1 / 0

ErrEx.Catch 91
  Debug.Print "I didn't set something on fire...."
ErrEx.CatchAll
  Debug.Print "Welp. I failed."
ErrEx.Finally
  Debug.Print "Goodbye, cruel world."
End Sub

Соответствующая документация

Примечание: я являюсь клиентом vbWatchDog.

0 голосов
/ 13 февраля 2019

VBA не поддерживает Try Catch.Вы можете использовать обработку ошибок или более просто

On Error Resume Next
Set sm = CreateObject("SpectrumManager.Application")
On Error GoTo 0
If sm Is Nothing Then
    MsgBox "Can't Create Object"
End If

Простая процедура обработки ошибок может выглядеть следующим образом:

Public Sub test()
    Dim sm As Object
    On Error GoTo errhand
    Set sm = CreateObject("SpectrumManager.Application")
    'other code
    Exit Sub
errhand:
    Select Case Err.Number
    Case 429
        MsgBox "Can't Create Object"
        'Case... other errors
    End Select
End Sub
...