VBScript. Обработка ошибок
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