Читаем без скачивания VBA для чайников - Стив Каммингс
Шрифт:
Интервал:
Закладка:
* Создание контролируемых переменных типа 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>.
Чтобы удалить все назначенные точки останова сразу, выберите из меню Debug=Clear All
Breakpoints или нажмите <Ctrl+Shift+F9>. Точки останова моментально уйдут в историю - никакая команда Undo (Отменить) не поможет вам восстановить их.
Выяснение места остановки
Когда программа находится в режиме паузы, редактор Visual Basic подсвечивает оператор, который предполагается выполнить следующим. Для гарантии на полях около строки с этим оператором в окне редактирования программного кода появляется стрелка. То, что вы увидите, показано на рис. 9.4 (но чтобы представить его в цвете, пожалуй, без фантазии не обойтись).
Рис. 9.4. Не заметить строку с оператором, который должен будет выполняться следующим, просто невозможно (тем более, что эта строка обязательно будет на экране)
Если строка с оператором, выполняющимся следующим, присутствует на экране, не заметить ее подсветку просто невозможно. Но что делать после того, как вы полистаете текст программы или переключитесь в окно другого модуля? В таком случае найти этот оператор без специальных средств будет уже сложнее.
Здесь поможет специально предусмотренная для такого случая команда Show Next Statement (Показать следующий оператор). Выберите Debug=Show Next Statement, и редактор Visual Basic быстренько доставит вас к нужному оператору. Есть также команда, позволяющая выбрать в качестве следующего другой оператор, но она будет обсуждаться позже, в подразделе "Назначение другого следующего оператора".
Альтернатива точкам останова: оператор Stop
Точки останова использовать очень просто, но они имеют один недостаток: они временны. Если отлаживаемая программа достаточно сложна, скорее всего, вам не удастся привести ее в полный порядок за один раз. Точки останова не сохраняются в программном коде, поэтому, открыв проект в редакторе Visual Basic в следующий раз, вы их уже не увидите.
Эта проблема решается с помощью оператора Stop. Поместите этот оператор в программный код. и в соответствующем месте программа перейдет в режим паузы. Вместе с другими операторами программы операторы Stop будут сохраняться при сохранении проекта.
Желаете пример, господа? Извольте:
* * *
intДанныеCMapca = ПолучениеДанныхСМарса(1.5454)
Stop
MsgBox "Результат " & intДанныеCMapca /Z
* * *
Взглянув на этот пример, вы можете догадаться, что здесь оператор Stop используется для того, чтобы прозондировать подозрительные результаты, отображаемые в окне сообщения. Выполнение оператора Stop заставит перейти программу в режим паузы сразу после того, как процедура-функция ПолучениеДанныхСМарса присвоит свое значение переменной. Вы получите возможность проверить значения обеих переменных, используемых для вычислений в следующей за оператором Stop строке, чтобы выяснить, какая из переменных стала источником проблемы.
Когда вы достаточно насладитесь режимом паузы (по крайней мере на этот раз), дайте указание VBA продолжить нормальное выполнение программы. Для этого используются команды, находящиеся на тех же местах, что и команды для первоначального запуска программы. В режиме паузы соответствующие пункт меню Run (Выполнить) и кнопка панели инструментов со своих мест никуда не денутся, но изменят свои названия - они будут теперь называться Continue (Продолжить). По-прежнему клавишным эквивалентом для вызова соответствующей команды будет <F5>. Продолжая выполнение, программа может снова перейти в режим паузы, если доберется до следующей точки останова или возникнут иные условия, при которых активизируется режим паузы.
Чтобы совсем прекратить выполнение программы, используйте команду Reset
(Остановить выполнение). Для этого можно использовать кнопку Reset или пункт Reset меню
Run. Нажатие <A!t+F4> останавливает выполнение вообще любой программы в Windows, в том числе и VBA-программ. Но прежде чем нажать <Alt+F4>, убедитесь, что вы выполняете свою
VB А-программу, потому что в противном случае закроется либо редактор Visual Basic, либо ваше
VBA-приложение, либо какая-то другая программа Windows, оказавшаяся активной в тот момент.
Как и все хорошие отладчики, редактор Visual Basic дает возможность выполнять программу по шагам, по одному оператору за шаг. Такое замедление- просто находка для тех случаев, когда появляется подозрение на наличие логических ошибок, имеющих привычку прятаться в укромных местах программ.
Чтобы использовать все преимущества пошагового выполнения программы, желательно видеть, как в процессе выполнения программы изменяются значения переменных. В этом всегда готово помочь чудесное средство редактора Visual Basic, называемое Auto Data Tips (Автоматические подсказки значений), но еще более подробная информация предоставляется в окнах Locals (Окно локальных переменных) и Watches (Окно контролируемых выражений), которые к тому же позволяют при необходимости изменить значения представленных в них элементов. Все эти возможности будут обсуждаться ниже.
Начнем же, пожалуй, стрех команд Step редактора Visual Basic, а именно: Step Into.
Step Over и Step Out. Все три доступны либо через меню Debug, либо с помощью кнопок панели инструментов Debug, либо следующих комбинаций клавиш.
Step Into <F8>
Step Over <Shift+F8>
Step Out <Ctrl+Shift+F8>
Команда Step Into (Войти в процедуру) используется, если нужно выполнить процедуру по шагам в порядке естественного выполнения операторов. Каждый раз, когда применяется эта команда, VBA выполняет следующий оператор программы и снова переходит в режим паузы, чтобы вы имели возможность увидеть произошедшие при этом изменения. Удобнее всего вызывать команду Step Into нажатием клавиши <F8>.
Свое название эта команда получила из-за того, что при ее использовании происходит вход в любую из вызываемых в программе процедур: если следующим оператором оказывается вызов процедуры типа Sub или Function, то применение команды Step Into приведет к открытию вызванной процедуры в окне редактирования, чтобы вы могли пройти эту процедуру по шагам и увидеть все, что происходит.