VBA-Урок 2. Налагоджувач (Debugger)

Іструмент в середовищі VBA для відладки коду програм. Вміти працювати з дебагером життєво важливо кожному, хто пише на VBA. Він потрібен для того, щоби перевірити як працює ваш код, та щоб знайти і виправити в ньому помилки.

Відкрийте Visual Basic Editor (Alt+F11). Створіть в ньому модуль та пропишіть наступний код:

 Sub LearningDebug()
    Dim A As Long, B As Long, C As Long, D As Long

    D = 0
    A = 10
    Debug.Print "A = " + Trim(Str(A))
    B = 15
    Debug.Print "B = " + Trim(Str(B))
    C = A + B
    Debug.Print "C = " + Trim(Str(C))
    C = Round(C / 5)
    Debug.Print "С ділимо на 5: C = " + Trim(Str(C))
    C = Round(C / D) ' тут буде помилка, оскільки на нуль ділити неможна (а D = 0)
End Sub

Натисніть Ctrl+G, при цьому внизу з'явиться вікно Immediate. У цьому вікні можна в ході роботи макросу змінювати значення змінних, виконувати різний код на VBA, не написаний в модулі раніше.

Якщо стати курсором всередину коду модуля і натиснути F5, він виконається цілком. Якщо натиснути F8 - виконається тільки один рядок коду. Наступне натискання F8 виконає наступний рядок коду і т.д. можна виконати покроково весь код. За допомогою кнопки F9 можна створити точку зупинки. Якщо потім ви запустите код за допомогою кнопки F5, код буде виконаний до зазначеного рядка і потім призупиниться. Далі його можна буде продовжити за допомогою кнопок F5 або F8, описаних раніше.

Якщо уважно розглянути код, ви побачите, що в змінні A, B, C, D присвоюються числа. Рядки Debug.Print "текст" друкують зазначений нами текст у відкрите раніше вікно Immediate, щоб бачити, що відбувається із змінною. Str (A) перетворює число в текстове значення. А Trim () прибирає з нього праворуч і ліворуч прогалини. Оператор Round (С) округлює значення за правилами арифметики до цілого числа (тому результат обчислень ми присвоюємо в змінну цілого типу Long, значить він повинен бути цілим). В кінці коду ми спеціально створили помилкову ситуацію, щоб потренуватися використовувати дебагер.

Станьте всередину коду і натисніть F8 чотири рази. Жовтим буде відзначено рядок, який буде виконаний наступним. Наведіть курсор на різні змінні. При цьому з'явиться спливаюче віконце, в якому побачите їх значення. Змінні, яким ще не були привласнені значення дорівнюють нулю.
Натисніть ще раз F8. У вікні Immediate з'явиться рядок:
А = 10
Тепер ми можемо змінити значення змінної A одразу у вікні Immediate (наприклад, змінимо його на 8). Для цього в новому рядку вікна Immediate напишіть:
А = 8
і натисніть Enter. Тепер наведіть на змінну A курсор і побачите, що його значення дорівнює 8. щоб побачити значення, не наводячи курсор, можна змусити його відобразитися у вікні Immediate. Робиться це так, введіть в порожньому рядку вікна Immediate:
?A
і натисніть Enter. Знак ? у вікні Immediate означає те ж саме, що і Debug.Print в коді. Просто так зручніше і коротше писати. Відразу ви побачите число - результат вашого запиту.

Станьте курсором на останній рядок коду (C = Round (C / D)) і натисніть F9. З'явиться точка зупинки. Тією ж кнопкою її можна прибрати, але ми її прибирати поки не будемо. Натисніть F5, програма виконає всі рядки і зупиниться на останній. У вікні Immediate з'являться, повідомлення про присвоєння значень змінним. Ми дісталися до останнього рядка коду. Він повинен викликати помилку, так як містить ділення на нуль. Натисніть F8 і переконаєтеся в цьому. У вікні, що з'явиться, натисніть Debug. Якщо ви натиснете End, виконання програми зупиниться, а ми хочемо довести її до кінця.

Виправити ситуацію можна, змінивши значення змінної D. Зараз вона дорівнює нулю. У вікні Immediate введіть в порожньому рядку текст:
D = 2
і натисніть Enter. Тепер останнім рядком коду ми ділимо не на нуль, а на 2, таким чином уникаючи помилки. Натисніть F5 і програма завершить свою роботу без помилок.

Спробуйте змінити код та потренуйтеся у використанні налагоджувача. Повірте, він вам дуже полегшить життя.

Статті по темі:

  • VBA-Урок 1. Що таке VBA, основні поняття.
  • VBA-Урок 3. Колекція Sheets