При написанні процедур, функцій або великих програм можуть виникати помилки. Це природне явище. Адже неможливо передбачити абсолютно все, або продумати логіку програми до найменших дрібниць. Та й від випадкових помилок через неуважність ніхто не застрахований.
При виникненні помилки виконання програми, користувачеві виводиться на екран діалогове вікно, в якому вказується номер помилки та її короткий опис.
У цьому вікні є 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 ("Виникла помилка").
Пам'ятайте.
Створюючи програму, ви повинні передбачити різні нестандартні ситуації, які можуть виникнути під час роботи з нею. Намагайтеся постійно створювати обробники помилок, які виявлятимуть та оброблятимуть помилки виконання програми. Це дозволить виконати відповідні дії, наприклад, вивести повідомлення про помилку, записати її в лог-файл, або спробувати відновитись після помилки та продовжити роботу програми.