Правильная обработка ошибок в VBA (Excel)

Я уже давно работаю с 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?

56
задан Luuklag 12 August 2019 в 10:33
поделиться