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