Ошибки выполнения процедур VBA

Ошибки выполнения процедур и функций VBA. Урок №39

При написании процедур, функций, или больших программ, могут возникать ошибки. Это вполне естественное явление. Ведь невозможно предугадать абсолютно всё, или продумать логику программы до мелочей. Да и от случайных ошибок по невнимательности никто не застрахован.

При возникновении ошибки выполнения программы, пользователю выводится на экран диалоговое окно, в котором указывается номер ошибки и её краткое описание.

В этом окне есть 4 кнопки:

  1. Continue (Продолжить) – предназначена для того, чтобы можно было продолжить выполнение процедуры или функции. Но в большинстве случаев эта кнопка неактивна.
  2. End (Закончить) – прекращает выполнение процедуры, или функции.
  3. Debug (Отладка) – прерывает выполнение процедуры (функции) и открывает редактор кода VBA, чтобы пользователь мог внести исправления именно в тот оператор, где возникла ошибка. Строка с ошибкой подсвечивается жёлтым цветом.
  4. Help (Помощь) – выводит страницу справки VBA на которой можно прочитать описание обнаруженной ошибки выполнения.

Ошибка VBA

Обработка ошибок VBA

Одним из способов обработки ошибок в VBA является использование конструкции On Error, которая включает программу обработки ошибок и указывает местоположение этой программы в процедуре.

Пример ошибки в коде VBA

Function SquareRoot()
    Dim a As Integer
    a = InputBox("Введіть значення:", , "0")
    
    If a <> False Then
        SquareRoot = (Sqr(a))
    Else
        SquareRoot = a
    End If
End Function

Sub myCode()
    MsgBox (SquareRoot(s))
End Sub

В данном коде, какое бы число пользователь не ввёл в диалоговое окно, всегда будет возникать ошибка. Я допустил её специально, чтобы показать как ведёт себя VBA при возникновении ошибок в коде.

Пример обработки ошибок с помощью On Error

Function SquareRoot()
On Error GoTo ErrorHandler
    Dim a As Integer
    a = InputBox("Введіть значення:", , "0")
    
    If a <> False Then
        SquareRoot = (Sqr(a))
    Else
        SquareRoot = a
    End If
ErrorHandler:
MsgBox ("Виникла помилка")
End Function

Sub myCode()
    MsgBox (SquareRoot(s))
End Sub

В этом коде я добавил обработчик ошибок On Error. А именно:

  1. Первой строкой функции я прописал как должна вести себя программа, если при выполнении данной функции возникнет ошибка. Строка On Error GoTo ErrorHandler включает подпрограмму обработки ошибок, и в случае возникновения ошибки код будет выполняться со строки ErrorHandler.
  2. В ErrorHandler: я написал что программа должна вывести пользователю сообщение о том, что возникла ошибка – MsgBox ("Виникла помилка").

Main Menu