Мой личный взгляд на заявление, сделанное ранее в этой теме:
И просто для удовольствия:
При возобновлении ошибки Следующим является воплощение дьявола, которого следует избегать, так как оно молча скрывает ошибки.
Я использую On Error Resume Next
для процедур, в которых я не хочу, чтобы ошибка остановила мою работу, и где любое утверждение не зависит от результата предыдущих операторов.
Когда я делаю это, я добавляю глобальную переменную debugModeOn
и устанавливаю ее на True
. Тогда я использую это так:
If not debugModeOn Then On Error Resume Next
Когда я доставляю свою работу, я устанавливаю переменную в false, таким образом скрывая ошибки только для пользователя и показывая их во время тестирования.
Также использует его при выполнении чего-то, что может привести к сбою, например, вызов DataBodyRange объекта ListObject, который может быть пустым:
On Error Resume Next
Sheet1.ListObjects(1).DataBodyRange.Delete
On Error Goto 0
Вместо:
If Sheet1.ListObjects(1).ListRows.Count > 0 Then
Sheet1.ListObjects(1).DataBodyRange.Delete
End If
Или проверка наличия предмета в коллекции:
On Error Resume Next
Err.Clear
Set auxiliarVar = collection(key)
' Check existence (if you try to retrieve a nonexistant key you get error number 5)
exists = (Err.Number <> 5)