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