Я уже давно работаю с VBA, но я все еще не уверен в обработке ошибок.
Хорошая статья - одна из CPearson.com
Однако мне все еще интересно, был ли способ, которым я использовал ErrorHandling, был/полностью ошибочен: Блок 1
On Error Goto ErrCatcher
If UBound(.sortedDates) > 0 Then
// Code
Else
ErrCatcher:
// Code
End If
Предложение if, потому что, если оно истинно, оно будет выполнено, и если он не сработает, Goto войдет в часть Else, поскольку Ubound массива никогда не должен быть равен нулю или меньше, без ошибки, этот метод работал до сих пор хорошо.
Если я правильно понял, это должно быть так: Блок 2
On Error Goto ErrCatcher
If Ubound(.sortedDates) > 0 Then
// Code
End If
Goto hereX
ErrCatcher:
//Code
Resume / Resume Next / Resume hereX
hereX:
Или даже так: Блок 3
On Error Goto ErrCatcher
If Ubound(.sortedDates) > 0 Then
// Code
End If
ErrCatcher:
If Err.Number <> 0 then
//Code
End If
Самый распространенный способ, который я вижу, - это то, что ошибка "Catcher" находится в конце sub, а Sub фактически заканчивается раньше с помощью "Exit Sub", но, однако, это немного запутывает, если Sub достаточно большой, если вы прыгаете наоборот, чтобы прочитать код?
Блок 4
Источник следующего кода: CPearson.com
On Error Goto ErrHandler:
N = 1 / 0 ' cause an error
'
' more code
'
Exit Sub
ErrHandler:
' error handling code'
Resume Next
End Sub
Должно ли это быть в блоке 3?
Спасибо, что прочитали мой вопрос Приветствую skofgar