Помилки виконання процедур 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