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

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

Жанры

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.

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

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

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

Пламенев. Книга 3-7

Карелин Сергей Витальевич
Пламенев
Фантастика:
аниме
уся
фэнтези
сянься
5.00
рейтинг книги
Пламенев. Книга 3-7

Вернувшийся: Новая жизнь. Том I

Vector
1. Вернувшийся
Фантастика:
боевая фантастика
рпг
5.00
рейтинг книги
Вернувшийся: Новая жизнь. Том I

Контртеррор

Валериев Игорь
6. Ермак
Фантастика:
альтернативная история
5.00
рейтинг книги
Контртеррор

На границе империй. Том 10. Часть 6

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 6

Отверженный III: Вызов

Опсокополос Алексис
3. Отверженный
Фантастика:
фэнтези
альтернативная история
7.73
рейтинг книги
Отверженный III: Вызов

Эпоха Опустошителя. Том IX

Павлов Вел
9. Вечное Ристалище
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Эпоха Опустошителя. Том IX

Первый среди равных. Книга VI

Бор Жорж
6. Первый среди Равных
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Первый среди равных. Книга VI

Язычник

Мазин Александр Владимирович
5. Варяг
Приключения:
исторические приключения
8.91
рейтинг книги
Язычник

Страж Кодекса. Книга V

Романов Илья Николаевич
5. КО: Страж Кодекса
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Страж Кодекса. Книга V

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

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

Перешагнуть пропасть

Муравьёв Константин Николаевич
1. Перешагнуть пропасть
Фантастика:
боевая фантастика
космическая фантастика
8.38
рейтинг книги
Перешагнуть пропасть

Третий. Том 6

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
фантастика: прочее
попаданцы
5.00
рейтинг книги
Третий. Том 6

Ефрейтор. Назад в СССР. Книга 2

Гаусс Максим
2. Второй шанс
Фантастика:
попаданцы
альтернативная история
7.00
рейтинг книги
Ефрейтор. Назад в СССР. Книга 2