Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие.doc
Скачиваний:
153
Добавлен:
02.05.2014
Размер:
1.63 Mб
Скачать

3.3.11. Работа с ошибками в vba

Виды ошибок. Ошибки можно разделить на следующие три вида: ошибки компиляции; ошибки периода выполнения; логические ошибки.

Ошибки компиляции. Ошибки компиляции проистекают из ошибок в тексте кода. Если во время разработки введено неправильное ключевое слово, пропущена необходимая пунктуация или, например, использована инструкция Next без соответствующего инструкции For, Access обнаружит эти ошибки при компиляции приложения.

Если установлена функция Проверка синтаксиса во вкладке Модуль окна диалога Параметры, то при появлении синтаксической ошибки во время ввода текста в окно редактора кода Access немедленно выведет на экран сообщение об ошибке.

Чтобы установить опцию Проверка синтаксиса необходимо:

1. В меню Сервис выбрать команду Параметры и в окне диалога Пара­метры открыть вкладку Модуль.

2.В разделе Программирование установить флажок Проверка синтак­сиса

Ошибки периода выполнения. Ошибки периода выполнения возникают, когда приложение выполняется и Access обнаруживает, что инструкция делает попытку выполнить недопустимое или невозможное дейст­вие. Пример — деление на ноль. Прежде чем приложение обнаружит эту ошибку, его необходимо запустить на выполнение.

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

Как избежать ошибок? Имеется несколько общих рекомендаций, позволяющих уменьшить количество ошибок в приложении:

• каждая процедура обработки события и каждая процедура общей области должны иметь определенную, четкую цель;

• не следует жалеть комментариев. При последующем анализе кода комментарии существенно облегчают понимание назначения каждой процедуры;

• необходимо, когда возможно, использовать явные ссылки на объекты. Объекты нужно объявлять так, как они представлены в окне Классы окна Просмотр объектов вместо использования типа Variant или общего типа данных Object;

• рекомендуется разработать единообразную схему именования для переменных и объектов приложения;

• один из наиболее общих источников ошибок — опечатки в именах переменных или элементов управления. Избежать этого можно, используя инструкцию Option Explicit.

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

Чтобы предупредить такие ситуации, нужно использовать возможности обработки ошибок, предоставляемые Access. Эти средства позволяют перехватывать ошибки и выполнять некоторое корректирующее действие. Когда происходит ошибка, Access устанавливает личные свойства объекта Err, такие, как номер ошибки, ее описание и т. д. Объект Err и его свойства можно использовать в подпрограмме обработки ошибок для организации интеллектуального поведения приложения при наступлении ситуации ошибки.

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

1. Установить ловушку для ошибки, сообщив приложению, куда следует выполнить переход (какую подпрограмму обработки ошибки выполнить), если происходит ошибка.

"Ловушку" определяет инструкция On Error, которая направляет поток выполнения приложения на метку, отмечающую начало подпрограммы обработки ошибки.

Ловушка ошибки активируется, когда Visual Basic выполняет инструкцию On Егrоr, и остается активированной до тех пор, пока активна содержащая ее процедура, то есть до выполнения инструкции Exit Sub, Exit Function, Exit Property, End Sub, End Function или End Property этой процедуры. Хотя, в любой данной процедуре в любой момент может активироваться только одна ловушка ошибки, можно создавать несколько альтернативных ловушек, активируя их при разных ситуациях. Можно также деактивировать ловушку ошибки, используя специальный синтаксис инструкции On Error : On Error GoTo 0.

Для настройки перехода к подпрограмме обработки ошибок используется инструкция On Error GoTo строка, где строка указывает метку, идентифицирующую код обработки ошибок.

2. Написать подпрограмму обработки ошибок, реагирующую на все ошибки, которые данной ситуации можно предусмотреть.

Первый шаг при написании подпрограммы обработки ошибок — введение метки строки, отмечающей начало подпрограммы. Метка строки должна иметь некоторое описательное имя и должна заканчиваться двоеточием. Общее соглашение предусматривает размещение кода обработки ошибок в конце процедуры непосредственно после инструкций Exit Sub, Exit Function или Exit Property. Это позволяет процедуре в случае отсутствия ошибок не выполнять код обработки ошибок.

Тело подпрограммы обработки ошибок содержит код, который фактически управляет ошибкой обычно в форме инструкции Select Case или If...Then...Else. Необходимо заблаговременно определить, какие ошибки могут происходить, и обеспечить ход действий для каждой из них, например, пригласив пользователя вставить диск в случае ошибки "Устройство недоступно". Помимо этого, всегда нужно обеспечивать возможность обработки любых непредвиденных ошибок. Для этого можно использовать предложение Else или Case Else.

Свойство Number объекта Err содержит числовой код, представляющий самую последнюю ошибку периода выполнения. Используя объект Err в комбинации с инструкцией Select Case или If….Then….Else, можно предпринять определенное действие для любой ошибки.

Примечание. Строка, содержащаяся в свойстве Description объекта Err, поясняет ошибку, ассоциированную с текущим номером ошибки. Точная формулировка описания может изменяться с версиями Access. Следовательно, чтобы идентифицировать определенную ошибку, нужно использовать Err Number вместо Err.Description.

3. Выйти из подпрограммы обработки ошибок.

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

Инструкции

Описание

Resume [0]

Выполнение программы продолжается с инструкции, которая обус­ловила ошибку, или с последнего вызова процедуры, содержащей подпрограмму обработки ошибок. Эту инструкцию следует исполь­зовать для повтора операции после исправления условия, которое вызвало ошибку.

Resume Next

Выполнение программы продолжается с инструкции, следующей непосредственно за той, которая обусловила ошибку. Если ошиб­ка произошла вне процедуры, которая содержит процедуру обра­ботки ошибки, выполнение продолжается с инструкции, следующей за вызовом той процедуры, в которой произошла ошибка (если вызываемая процедура не имеет активированной процедуры обработки ошибки).

Resume строка

Выполнение программы продолжается с метки, специфицирован­ной параметром строка, где строка — имя метки или номер строки, отличный от нуля. Метка должна быть

в той же процедуре, где и процедура обработки ошибки.

Err.Raise Number:= номер

Вызывает ошибку периода выполнения. Когда эта инструкция вы­полняется внутри подпрограммы обработки ошибок, Access ищет список вызовов для другой подпрограммы обработки ошибок.

Соседние файлы в предмете Базы данных