При написании процедур, функций, или больших программ, могут возникать ошибки. Это вполне естественное явление. Ведь невозможно предугадать абсолютно всё, или продумать логику программы до мелочей. Да и от случайных ошибок по невнимательности никто не застрахован.
При возникновении ошибки выполнения программы, пользователю выводится на экран диалоговое окно, в котором указывается номер ошибки и её краткое описание.
В этом окне есть 4 кнопки:
- Continue (Продолжить) – предназначена для того, чтобы можно было продолжить выполнение процедуры или функции. Но в большинстве случаев эта кнопка неактивна.
- End (Закончить) – прекращает выполнение процедуры, или функции.
- Debug (Отладка) – прерывает выполнение процедуры (функции) и открывает редактор кода VBA, чтобы пользователь мог внести исправления именно в тот оператор, где возникла ошибка. Строка с ошибкой подсвечивается жёлтым цветом.
- Help (Помощь) – выводит страницу справки 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. А именно:
- Первой строкой функции я прописал как должна вести себя программа, если при выполнении данной функции возникнет ошибка. Строка On Error GoTo ErrorHandler включает подпрограмму обработки ошибок, и в случае возникновения ошибки код будет выполняться со строки ErrorHandler.
- В ErrorHandler: я написал что программа должна вывести пользователю сообщение о том, что возникла ошибка – MsgBox ("Виникла помилка").
Помните.
Создавая программу, вы должны предугадать различные нестандартные ситуации, которые могут возникнуть в ходе работы пользователя с ней. Старайтесь постоянно создавать обработчики ошибок, которые будут выявлять и обрабатывать ошибки выполнения программы. Это позволит выполнить соответствующие действия, например, вывести сообщение об ошибке, записать ее в лог-файл или попробовать восстановиться после ошибки и продолжить работу программы.
