Чтение онлайн

на главную - закладки

Жанры

VBA для чайников

Каммингс Стив

Шрифт:

С помощью переключателей из раздела Watch Type (Тип контроля) в окнах Add Watch и Edit Watch вы получаете возможность назначить автоматические точки останова следующих двух типов.

* Точки останова, автоматически переводящие выполнение программы в режим паузы, как только программа выполнит оператор, изменяющий на ненулевое значение заданного выражения (напомню, что в VBA 0 означает False, а любое ненулевое значение - это True). Чтобы назначить автоматическую точку останова этого типа, выберите переключатель Break When Value Is True (Стоп при значении Истина).

* Точки останова, автоматически переводящие выполнение программы в режим паузы, как только программа выполнит оператор, изменяющий значение заданного выражения. Чтобы назначить автоматическую точку останова этого типа, выберите переключатель Break When Value Changes (Стоп при изменении значения).

Несмотря на свои выдающиеся таланты, "останавливающие" контролируемые выражения в окне Watches выполняют все, что требуется от обычных контролируемых выражений. Отличить контролируемые выражения разных типов можно только по маленьким пиктограммам слева от имен этих выражений. На рис. 9.14 эти пиктограммы различимы с трудом, но на экране они видны довольно хорошо.

Рис. 9.14. Контролируемое выражение типа "стоп при изменении значения * на основе переменной caseRange толь/со что перевело выполнение программы в режим пары

После того как изменение значения контролируемого выражения активизирует связанную с этим выражением точку останова, VBA приостановит выполнение программы, переведя ее в режим паузы. В окне редактирования программного кода оператор, вызвавший изменение, будет предшествовать подсвеченному. В окне Watches подсвечено контролируемое выражение, вызвавшее переход в режим паузы, так что вы увидите, значение какого из контролируемых выражений изменилось (см. рис. 14.34).

Отлов “диких” ошибок с помощью On Error и

Если в ходе выполнения программы что-то идет не так, как нужно, обычно на работе программы это сказывается катастрофически. VBA прекращает выполнение программы и выводит диалоговое окно с немногословным сообщением об ошибке выполнения. Пример такого сообщения вы уже видели на рис. 9.2. На выбор вам предлагается щелкнуть либо на кнопке End (чтобы завершить выполнение программы), либо на кнопке Debug (чтобы перейти в режим паузы), либо на кнопке Help (чтобы отобразить на экране раздел справки, соответствующий произошедшей в вашей программе ошибке).

Ни одно из этих предложений не выглядит вполне удовлетворительным, особенно при выполнении программы в процессе эксплуатации, а не отладки. Менее раздражающей оказывается ситуация, когда ваша программа может сама распознать ошибку и исправить или, по крайней мере, мягко обойти ее прежде, чем VBA выскочит со своим грубым сообщением об ошибке. А если сделать это нельзя, то неплохо хотя бы одарить пользователя немного более дружелюбным сообщением по этому поводу.

Все это можно реализовать, но для этого вам придется добавить в программу свой собственный обработчик ошибок. О том, как это сделать, и пойдет речь в данном разделе.

Как я уже упоминал - но повторяю здесь, поскольку это было слишком давно, - появление ошибок выполнения обусловливается следующими двумя причинами.

* Наличие ошибок в логике программы, вследствие которых возникает программная ситуация, недопустимая с точки зрения VBA. Представьте, например, что в программном коде имеется оператор, в котором некоторое значение делится на значение переменной. Если перед этим переменной в программе будет присвоено нулевое значение - вы попались. Делить на нуль категорически запрещено, от этого у компьютера может случиться удар, и поэтому VBA остановит выполнение программы.

* Возникновение непредвиденного стечения обстоятельств, не позволяющего программе продолжить работу. Например, разрыв соединения с базой данных, сетевым сервером или страницей Internet может не позволить программе получить необходимые для ее работы значения.

Но независимо от причин, выход один - организация защиты программы и пользователя с помощью создания программного обработчика ошибок.

Чтобы VBA не имел дела с ошибками выполнения, а взять заботу о них на себя, процедуры нужно снабдить обработчиком ошибок - блоком программного кода, выполняемым только тогда, когда происходит ошибка. Если при выполнении процедуры что-то пойдет не так, VBA вызовет этот обработчик ошибок, чтобы в нем выяснить, какого типа ошибка произошла, и в зависимости от сложившейся ситуации предпринять предусмотренные вами действия.

Чтобы добавить в процедуру программный код обработчика ошибок, нужно сделать следующее:

* добавить в начало процедуры оператор On Error, сообщающий VBA, где найти программный код обработчика ошибок;

* в конец процедуры добавить оператор Exit Sub (или Exit Function), за котор рым должен следовать программный код обработчика ошибок;

* создать программный код самого обработчика ошибок, начало которого должно идентифицироваться некоторой меткой.

Все три шага при этом обязательны. Например, без оператора On Error VBA не узнает, что обработчик ошибок вами вообще предусмотрен.

Оператор On Error делает обработчик ошибок доступным, сообщая VBA о том, где найти этот обработчик ошибок в программном коде. В использовании этот оператор выглядит так: On Error GoTo метка, где метка - это метка, идентифицирующая в процедуре начало программного кода обработчика ошибок.

Вот пример использования оператора On Error:

Sub ErrorHandlerDemo

On Error GoTo ErrorHandler

MamaVariable = DoThisFunction (X,Y,Z)

PapaVariable = DoThatProcedure

EabyVariable = MamaVariable + PapaVariable

' здесь завершается выполнение процедуры, когда ошибок нет

Exit Sub

Error Handler:

(здесь размещаются операторы обработчика ошибок)

End Sub

Вам полезно знать, что существуют еще две формы оператора On Error.

* On Error GoTo 0 отменяет программную обработку ошибок в процедуре, начиная с данного места, и выполняет очистку объекта Err. Используйте этот оператор чтобы отменить действие ранее выполненного оператора On Error GoTo метка, если по каким-то причинам вы предпочтете отказаться от услуг своего обработчика ошибок в пользу "крикливо бесцеремонного" обработчика VBA.

* On Error Resume Next дает указание VBA игнорировать строку программного кода, ставшую причиной ошибки, и продолжить выполнение со следующей за ней строки. Ясно, что игнорирование ошибки не устраняет ее, но оператор On Error Resume Next оказывается полезным при работе с объектами из содержащего программу приложения или других компонентов, которые создали не вы, - эти достаточно тонкие вопросы обсуждаются в главе 14.

Поделиться:
Популярные книги

Старый, но крепкий 3

Крынов Макс
3. Культивация без насилия
Фантастика:
рпг
уся
фэнтези
5.00
рейтинг книги
Старый, но крепкий 3

Древесный маг Орловского княжества 3

Павлов Игорь Васильевич
3. Орловское княжество
Фантастика:
аниме
сказочная фантастика
фэнтези
попаданцы
гаремник
5.00
рейтинг книги
Древесный маг Орловского княжества 3

Князь Целитель 5

Ткачев Андрей Юрьевич
5. Князь Целитель
Фантастика:
боевая фантастика
городское фэнтези
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Князь Целитель 5

Убивать чтобы жить 3

Бор Жорж
3. УЧЖ
Фантастика:
героическая фантастика
боевая фантастика
рпг
5.00
рейтинг книги
Убивать чтобы жить 3

Товарищ "Чума"

lanpirot
1. Товарищ "Чума"
Фантастика:
попаданцы
альтернативная история
4.00
рейтинг книги
Товарищ Чума

Кодекс Охотника. Книга XXXII

Винокуров Юрий
32. Кодекс Охотника
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Кодекс Охотника. Книга XXXII

Евреи России. Времена и события. История евреев Российской империи

Кандель Феликс Соломонович
Научно-образовательная:
история
5.00
рейтинг книги
Евреи России. Времена и события. История евреев Российской империи

Герой

Бубела Олег Николаевич
4. Совсем не герой
Фантастика:
фэнтези
попаданцы
9.26
рейтинг книги
Герой

Инженер Петра Великого

Гросов Виктор
1. Инженер Петра Великого
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Инженер Петра Великого

Эммануэль

Арсан Эммануэль
1. Эммануэль
Любовные романы:
эро литература
7.38
рейтинг книги
Эммануэль

На границе империй. Том 6

INDIGO
6. Фортуна дама переменчивая
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.31
рейтинг книги
На границе империй. Том 6

Последний Паладин. Том 5

Саваровский Роман
5. Путь Паладина
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний Паладин. Том 5

Телохранитель Генсека. Том 4

Алмазный Петр
4. Медведев
Фантастика:
попаданцы
альтернативная история
6.00
рейтинг книги
Телохранитель Генсека. Том 4

Снайпер

Поселягин Владимир Геннадьевич
3. Жнец
Фантастика:
боевая фантастика
попаданцы
5.60
рейтинг книги
Снайпер