Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции Visual Basic.doc
Скачиваний:
105
Добавлен:
09.04.2015
Размер:
1.1 Mб
Скачать

5.1. Перехват ошибки

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

On Error GoTo Метка

On Error Resume Next

On Error GoTo 0

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

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

Инструкцию Resume Nextможно использовать вместе с инструкциейOn Error, и тогда каждая строка, вызвавшая ошибку, игнорируется, так как управление передается на следующую инструкцию.

Если в качестве метки указан ноль (0), то предусмотренная разработчиком обработка ошибок отключается и включается стандартный механизм обработки ошибок.

5.2 Проверка и устранение ошибки

Инструкция On Errorне выполняет непосредственно никакой обработки ошибок, а лишь передает управление ответственному за обработку ошибок фрагменту программы. Обычно метка находится в конце процедуры и перед ней помещается инструкцияExitSubилиExitFunction. Благодаря этой инструкции, при безошибочном выполнении процедура в этом месте завершает свою работу, и фрагмент процедуры после метки выполняется только после возникновения ошибки.

Обработка ошибки должна выполняться сразу после ее обнаружения. Сначала следует установить тип ошибки. Для этого в VisualBasicсуществует объектErr, свойство которогоNumberсодержит код последней возникшей ошибки. СвойствоDescriptionэтого окна содержит текстовое сообщение о последней ошибке.

Пример.

Dim ErrNum1 As Integer

ErrNum1 = Err.Number

Список кодов ошибок, которые можно перехватывать и обрабатывать, вы найдете в системе справок VB. После определения типа ошибки по ее коду (свойствоNumberобъектаErr) следует попытаться устранить ошибку или обработать ее так, чтобы она не мешала выполнению программы. Например, при делении на нуль это может быть прекращение текущих вычислений. При ошибках обращения к диску может отображаться диалоговое окно для принятия пользователем решения о прекращении операции или повторном выполнении.

5.3 Продолжение выполнения программы

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

Процедура с обработчиком ошибок может выглядеть следующим образом:

Sub Error_Test()

Dim E As Single

On Error GoTo ErrLabel

'Включает обработку ошибок

For i = 4 То 0 Step -1

Е = 2 / I

'Вызывает деление на нуль

Next

Exit Sub

ErrLabel: 'Метка

Select Case Err.Number 'Проверка ошибки

Case 11 'Деление на нуль

i = -1

Err.Clear

Resume 'Возврат

Case Else

MsgBox (Err.Description)

Stop

End Select

End Sub

Свойство DescriptionобъектаErrвозвращает текст системного описания ошибки. Это можно использовать для вывода текста сообщения об ошибке в обработчике ошибок, поскольку системный вывод сообщения об ошибке при использовании обработчика ошибок не производится.