VBScript. Обработка ошибок

Материал из GedeminWiki
Перейти к: навигация, поиск

VBScript имеет весьма скудные встроенные средства обработки ошибок времени выполнения, которые сводятся к двум операторам:

 On Error GoTo 0
 On Error Resume Next

Первый – отключает обработку ошибок (состояние по-умолчанию). Если ошибка случится, то на экран будет выдано сообщение и выполнение текущей процедуры или функции прекратится.

При включенном режиме On Error Resume Next, ошибка не приводит к прерыванию выполнения кода и программист имеет возможность самостоятельно разобраться с ней. Информация об ошибке содержится в глобальном встроенном объекте Err. Ниже приводится описание его свойств и методов:

Description 
Текстовое описание ошибки.
HelpContext 
Номер топика в файле справки, который будет открыт, если пользователь воспользуется клавишей F1 в окне сообщения об ошибке.
HelpFile 
Имя файла справки.
Number 
Целочисленный номер ошибки. 0 означает отсутствие ошибки.
Source 
Наименование приложения, в котором произошла ошибка.

Методы:

Clear 
Очищает все свойства объекта, сбрасывает информацию об ошибке. Обратите внимание, что объект Err автоматически очищается при выполнении следующих операторов: On Error Resume Next, Exit Sub, Exit Function.
Raise 
Генерирует ошибку времени выполнения. Полный формат вызова: Err.Raise(number, source, description, helpfile, helpcontext).

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

Обработку ошибок проиллюстрируем на примере кода, который в цикле запрашивает у пользователя строку и пытается преобразовать ее в дату. Если введенная строка не является датой, то на экран выводится сообщение. Цикл повторяется, пока пользователь не введет корректную дату.

 Dim InputD, InputS
 On Error Resume Next
 Do
   Err.Clear
   InputS = InputBox("Введите дату")
   If IsNumeric(InputS) Then
     Err.Number = vbObjectError + 1
   Else
     InputD = CDate(InputS)
   End If
   If Err.Number <> 0 Then
   Application.MessageBox _
     "Неверный формат даты! Повторите ввод.", _
     "Ошибка", vbOkOnly + vbExclamation + vbSystemModal
   End If
 Loop Until Err.Number = 0
 On Error Goto 0

См. также

Персональные инструменты
Пространства имён

Варианты
Действия
Навигация
Инструменты