Если у меня есть вывод в блоке обработки ошибок, который показывает номер ошибки 0, что это означает?
Это означает, что объект Err
не содержал информацию об ошибке в той точке кода, где вы проверили свойство Err.Number
. Это может произойти по ряду разных причин:
- Объект
Err
был явно очищен предыдущим вызовом Err.Clear
- Объект
Err
был очищен путем вызова On Error Goto
. Оператор On Error Goto
очистит текущий Err
объект
- Объект
Err
был очищен с помощью оператора Resume X
. В отличие от обычного оператора Goto X
, Resume
очистит текущий объект Err
(и выдаст собственную ошибку, если объект Err
уже пуст)
Вы забыли выйти из текущего Sub
/ Function
/ Property
до достижения обработчика ошибок, например:
Public Sub SampleRoutine
On Error Goto ErrorHandler
DoSomething
DoSomethingElse
' You need an Exit Sub here so that the code does not reach the error handler'
'in the event no error occurs.'
ErrorHandler:
MsgBox Err.Number & "-" & Err.Description
End Sub
Это довольно распространенная ошибка в моем опыте. Если вы явно не выйдете из подпрограммы до того, как достигнете метки обработчика ошибок, код в обработчике ошибок все равно будет выполняться, даже если ошибок не возникнет. В этом случае Err.Number
будет равно 0, поскольку ошибки не было.