VBA для чайников
Шрифт:
Если вы обнаружите ошибки, к отладке нужно отнестись со всей серьезностью. В противном случае лучше вообще считать, что ошибок нет, потому что их не бывает и быть не может.
Комбинации клавиш для отладки
В табл. 9.1 перечислены комбинации клавиш, которые используются при отладке. Подробно каждую из них я рассмотрю дальше в настоящей главе.
Построчное выполнение кода (пошаговое) <F8>
Построчное выполнение кода без построчного выполнения отдельных процедур <Shift+F8>
Выполнение кода до точки вставки <Ctrl+F8>
Добавление точки останова <F9>
Удаление
Определение следующей инструкции, которая будет <Ctrl+F9> выполняться
Добавление контролируемого выражения <Shift+F9>
Выполнение отладочного кода или возвращение сведений об ошибке обращения к процедуре <Alt+F5>
Пошаговое выполнение отладочного кода или возвращение сведений об ошибке обращения к процедуре <Alt+F8>
Сделайте паузу!
Ключ к отладке программы кроется в режиме паузы VBA. Режим паузы - это временная остановка выполнения программы на некотором операторе в программном коде. Поскольку в этом случае программа еще ''живет", вы получаете возможность проверить текущие значения всех ее переменных. Кроме того, начиная с этого момента, вы получаете возможность использовать команды Step, чтобы продолжить выполнение программы в пошаговом режиме, по одному оператору за шаг, и наблюдать за соответствующими изменениями значений переменных при этом будет видно, получают переменные ожидаемые значения или нет.
Подробности такой работы с переменными и командами Step будут рассматриваться в этой главе позже.
На рис. 9.1 показан вид окна редактирования VBA-процедуры в режиме паузы. Если не считать желтой подсветки строки и стрелки на поле слева, указывающей на оператор, который должен выполняться следующим, то это окно редактора Visual Basic выглядит практически так же, как и при обычном редактировании программного кода.
Рис. 9.1. Процедура VBA в режиме паузы
На самом деле, в режиме паузы вы можете редактировать свой программный код прямо во время выполнения программы, внося изменения и добавляя совершенно новые строки программного кода по необходимости или по своему желанию. Это предусмотрено не для забавы - это очень удобное средство отладки, преимуществами которого нужно обязательно научиться пользоваться (подробнее об этом - ниже, в разделе "Добавление и редактирование программного кода в режиме паузы").
Вход в режим паузы
Имеется целый ряд возможностей для перевода программы в режим паузы, который можно сравнить со стоп-кадром анимации.
* Запуск программы сразу в режиме паузы с помощью команды Step Into (см. ниже раздел "Сквозь программу по шагам").
* Назначение точки останова строке программного кода. После того как программа при выполнении дойдет до оператора, с которым связана точка останова, выполнение прервется, и программа перейдет в режим паузы.
* Помещение в программный код оператора Stop. После выполнения этого оператора программа переходит в режим паузы, приготовившись продолжить выполнение с оператора, следующего за оператором Stop.
* Щелчок на кнопке Break (Пауза), выбор Run=Break из меню или нажатие комбинации клавиш <Ctrl+Break> во время выполнения программы. Используйте эту возможность для восстановления контроля над программой, которая по каким-то причинам не желает останавливаться сама. Никто не сможет предугадать, где при этом программа остановится, но зато после
остановки у вас появится возможность увидеть, где это произошло.* Создание контролируемых переменных типа Break When Value Is True (стоп при значении Истина) или Break When Value Changes (стоп при изменении значения). Тогда программа перейдет в режим паузы, как только значение контролируемой перемен1 ной станет равным True или как только ее значение изменится.
По-другому программа может перейти в режим паузы, когда возникает ошибка выполнения. VBA отображает диалоговое окно с описанием возникшей ошибки (рис. 9.2). В этом окне щелчок на кнопке End (Закончить) останавливает выполнение программы совсем, а щелчок на кнопке Debug (Отладка) переводит выполнение программы в режим паузы. На вкладке General (Общие) диалогового окна Tools=Options вам предоставляются некоторые возможности для выбора круга тех ошибок, появление которых должно останавливать выполнение программы.
Рис. 9.2. Диалоговое окно, сообщающее об ошибке выполнения
Размещение точек останова в программе
Если есть подозрение, что ошибка содержится в каком-то конкретном сегменте программного кода, поместите точку останова как раз перед этим сегментом. На рис. 9.3 видно, как редактор Visual Basic представляет точку останова на экране - в виде довольно жирной точки на полях в окне редактирования.
Рис. 9.3. При назначении точки останова редактор Visual Basic подсвечивает строку программного кода, перед которой должно остановиться выполнение программы
После того как точка останова размещена, вы имеете возможность выполнить программу на полной скорости вплоть до этой точки, пропустив отладку той части программного кода, которая (как вы надеетесь) не содержит ошибок. Когда VBA доберется до оператора, которому назначена точка останова, выполнение программы приостановится. В режиме паузы вы сможете проверить значения переменных и с помощью команд Step проследить за тем, как эти значения меняются при последовательном выполнении каждого из операторов в подозрительном блоке.
Чтобы разместить точку останова, просто щелкните на полях окна редактирования слева от соответствующей строки программного кода. Можно разместить точку останова и с помощью клавиатуры - для этого поместите курсор в нужную строку и нажмите <F9>.
Можно разместить столько точек останова в разных строках программы, сколько вы сочтете необходимым. Нельзя только размещать точки останова в строках комментариев и строках с операторами, которые VBA на самом деле не выполняет, например в строках с объявлениями переменных.
Помните о том, что VBA останавливает программу и переключается в режим паузы после выполнения оператора, непосредственно предшествующего оператору с точкой останова. Другими словами, оператор с точкой останова останется пока невыполненным- с него предполагается продолжить выполнение программы после выхода из режима паузы.
Удаление точек останова
Исправив ошибки в программном коде или отказавшись на время от попыток их исправления, вы захотите удалить ненужные точки останова. Удаление точек останова даст возможность VBA при следующем запуске выполнять программу без лишних задержек. Удаляется существующая точка останова точно так же, как и ставится - щелчком на полях в окне редактирования или нажатием клавиши <F9>.