Я уже давно работаю с VBA, но все еще не уверен об обработке ошибок.
Хорошая статья - одна из CPearson.com
Однако мне все еще интересно, был ли неправильный способ обработки ошибок, который я использовал раньше: Блок 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» находится в конце подпрограммы, а подпрограмма фактически заканчивается раньше с помощью «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?