Иструмент в среде 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 и программа завершит свою работу без ошибок.
Попробуйте изменить код потренируйтесь в использовании отладчика. Поверьте, он вам очень облегчит жизнь.