Читаем VBA для чайников полностью

Ни одно из этих предложений не выглядит вполне удовлетворительным, особенно при выполнении программы в процессе эксплуатации, а не отладки. Менее раздражающей оказывается ситуация, когда ваша программа может сама распознать ошибку и исправить или, по крайней мере, мягко обойти ее прежде, чем 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.

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

Перейти на страницу:

Все книги серии Для чайников

Похожие книги

1001 совет по обустройству компьютера
1001 совет по обустройству компьютера

В книге собраны и обобщены советы по решению различных проблем, которые рано или поздно возникают при эксплуатации как экономичных нетбуков, так и современных настольных моделей. Все приведенные рецепты опробованы на практике и разбиты по темам: аппаратные средства персональных компьютеров, компьютерные сети и подключение к Интернету, установка, настройка и ремонт ОС Windows, работа в Интернете, защита от вирусов. Рассмотрены не только готовые решения внезапно возникающих проблем, но и ответы на многие вопросы, которые возникают еще до покупки компьютера. Приведен необходимый минимум технических сведений, позволяющий принять осознанное решение.Компакт-диск прилагается только к печатному изданию книги.

Юрий Всеволодович Ревич

Программирование, программы, базы данных / Интернет / Компьютерное «железо» / ОС и Сети / Программное обеспечение / Книги по IT
C++
C++

С++ – это универсальный язык программирования, задуманный так, чтобы сделать программирование более приятным для серьезного программиста. За исключением второстепенных деталей С++ является надмножеством языка программирования C. Помимо возможностей, которые дает C, С++ предоставляет гибкие и эффективные средства определения новых типов. Используя определения новых типов, точно отвечающих концепциям приложения, программист может разделять разрабатываемую программу на легко поддающиеся контролю части. Такой метод построения программ часто называют абстракцией данных. Информация о типах содержится в некоторых объектах типов, определенных пользователем. Такие объекты просты и надежны в использовании в тех ситуациях, когда их тип нельзя установить на стадии компиляции. Программирование с применением таких объектов часто называют объектно-ориентированным. При правильном использовании этот метод дает более короткие, проще понимаемые и легче контролируемые программы. Ключевым понятием С++ является класс. Класс – это тип, определяемый пользователем. Классы обеспечивают сокрытие данных, гарантированную инициализацию данных, неявное преобразование типов для типов, определенных пользователем, динамическое задание типа, контролируемое пользователем управление памятью и механизмы перегрузки операций. С++ предоставляет гораздо лучшие, чем в C, средства выражения модульности программы и проверки типов. В языке есть также усовершенствования, не связанные непосредственно с классами, включающие в себя символические константы, inline-подстановку функций, параметры функции по умолчанию, перегруженные имена функций, операции управления свободной памятью и ссылочный тип. В С++ сохранены возможности языка C по работе с основными объектами аппаратного обеспечения (биты, байты, слова, адреса и т.п.). Это позволяет весьма эффективно реализовывать типы, определяемые пользователем. С++ и его стандартные библиотеки спроектированы так, чтобы обеспечивать переносимость. Имеющаяся на текущий момент реализация языка будет идти в большинстве систем, поддерживающих C. Из С++ программ можно использовать C библиотеки, и с С++ можно использовать большую часть инструментальных средств, поддерживающих программирование на C. Эта книга предназначена главным образом для того, чтобы помочь серьезным программистам изучить язык и применять его в нетривиальных проектах. В ней дано полное описание С++, много примеров и еще больше фрагментов программ.

Бьёрн Страуструп , Бьярн Страустрап , Мюррей Хилл

Программирование, программы, базы данных / Программирование / Книги по IT