Debug - Работа над ошибками.
Рассмотренный только что код макроса уже довольно сложен и не у всех новичков получится написать его с первого раза без ошибок. Поэтому для написания сложных макросов, особенно включающих циклические процедуры, нужно уметь запускать макрос в окне VBA-кодирования и выявлять «место поломки». Ниже рассмотрим основные приемы, которые помогут Вам быстро найти ошибки, допущенные в коде.
Если Вы не очень уверены в правильности написанного алгоритма, то перед первым запуском макроса его лучше протестировать:
· Сохраните книгу, в которой планируете запустить тест макроса, чтобы после теста закрыть ее без сохранения изменений
F ВАЖНО: действия макроса нельзя отменить! Обратите внимание: после того, как вы запустили даже самый легкий макрос, иконка отмены последних действий становится неактивной! Поэтому всегда убедитесь, что перед запуском макроса (особенно нового) Вы сохранили все открытые книги, чтобы Вы могли «откатить» файл до состояния «перед запуском макроса», просто закрыв его без сохранения и открыв заново.
· Перейдите в окно VBA-кодирования (Alt+F11 или Alt+F8).
· Найдите на панели инструментов закладку “Debug”.
Познакомимся с некоторыми командами из этой закладки:
· Step Into (F8) – это пошаговое выполнение макроса. В основном его используют, чтобы отследить результат выполнения команд макроса или значения какой-нибудь переменной, для чего полезно использовать окно
· Quick Watch (Shift+F9) – окно отслеживания значений введенных в него переменных.
· Add Watch – команда добавления в окно значений переменных.
· Toggle Breakpoint (F9) – установка критических точек кода, до которых Вам не интересно пошаговое выполнение макроса: тогда Вы сначала запускаете выполнение макроса, нажав на панели инструментов кнопку Run Sub (или функциональную клавишу F5) – макрос выполняет команды до установленной точки (BreakPoint), останавливается – и Вы можете либо посмотреть на значения переменных в окне Quick Watch, удостовериться в их корректности и продолжить выполнение макроса до конца (нажав или F5), - или просто начать пошаговое исполнение кода макроса, нажимая клавишу F8.
F Во время паузы в выполнении макроса, Вы можете открыть рабочее окно Excel и посмотреть на текущий результат работы макроса.
F Если Вы недовольны результатом работы макроса, Вы можете остановить его выполнение, нажав на панели инструментов кнопку Reset
· Снять BreakPoint можно повторным нажатием на нем клавиши F9 или выбрав в закладке Debug пункт «Clear All BreakPoints»
Рассмотрим работу с перечисленными командами на примере макроса «Сумма_итогов»
· Заходим в окно программирования VBA (Alt+F11 или Alt+F8).
· Выделяем переменную «Sum_Cur» – вызываем команду «Add Watch»
· В появившемся диалоговом окне нажимаем «ОК»
· Видим, что теперь внизу экрана появилось окно контрольных значений (см. рис7).
· Аналогичным образом добавляем в окно значений переменные End_Sum и Sum_Next.
· Жмем F8 и наблюдаем за пошаговой работой макроса.
· После пары итераций функции For мы убедились, что переменные рассчитываются корректно, формула суммы на рабочем листе записывается корректно – нажимаем F5 и ждем, когда макрос автоматически закончит процедуру.
Рисунок 7. Добавление переменных в окно Quick Watch.
Во время этого первого тестирования работы макроса, Вы обратили внимание, что внутри цикличной процедуры нам не очень интересны некоторые действия – поэтому поставим BreakPoints на строках
o Sum_Next = Obj_Cell.Row
o End_Sum = Sum_Next - Sum_Cur - 1
Теперь мы смело можем использовать только клавишу F5: каждый раз, когда макрос будет доходить до этих строк команд, он будет останавливаться и ждать следующего нажатия клавиш F5 или F8.
На рисунке 8 приведен пример работы макроса с установленными к нем BreakPoints:
ü Красным цветом отмечены строки кода, на которых установлен BreakPoint
ü Желтым отмечена строка кода, на которой сейчас остановился макрос
ü Внизу в окне значений показаны текущие значения контролируемых переменных.
Рисунок 8. Отслеживание значений переменных в окне Quick Watch.