Обработка ошибок
Элемент управления Script имеет событие Error, вызываемое в случаях возникновения ошибки. Ошибку может вызвать элемент управления (вызов метода с неправильным аргументом или попытка установить несуществующее свойство) или сам сценарий Она может генерироваться в основном приложении, но не раньше, чем пользователю предложат воспользоваться Script Debugger. Пока разрабатываются и тестируются сценарии, можно позволить Visual Basic запустить отладчик и помочь в отладке. Завершенное приложение не должно выдавать подобных сообщений.
Может показаться, что нынешняя версия элемента управления не позволяет подавлять диалоговое окно, что делает затруднительным распространение приложений. Пользователи могут не иметь инсталированного Script Debugger, и эти сообщения приведут к путанице. Нынешний элемент управления Script далек от совершенства, но, возможно, следующая версия будет более гибкой или будет иметь редактор кода программы.
Необходимо мириться с ограничениями и недостатками элемента управления Script. Для обработки ошибок используйте объект Error, который является свойством элемента управления Script и отличается от объекта Err в Visual Basic. Объект Error имеет два свойства, которые указывают место ошибки в сценарии:
• Line - номер строки с ошибкой;
• Column — положение первого символа оператора, вызвавшего ошибочную ситуацию.
Эти свойства используются для установки указателя на место ошибки. Когда в качестве редактора используется элемент управления TextBox, переход на заданный символ в заданной строке текста этого элемента не является тривиальной задачей. Не существует методов или свойств, позволяющих выполнить это непосредственно.
Объект Error элемента управления Script имеет дополнительные свойства, которые перечислены в табл. 20.5.
Таблица 20.5. Дополнительные свойства объекта Error элемента управления Script
Свойство | Описание | ||
Number Description
Text Source | Номер ошибки
Описание ошибки Строка с ошибочным оператором Имя процедуры или класса, в которых произошла ошибка |
После обработки ошибки для ее сброса вызывается метод
Clear объекта Error. Рассмотрим обработчик ошибок в коде кнопки Execute Script. Если элемент управления Script генерирует ошибку выполнения и свойство ScriptControll.Error.Number не равно нулю, то можно использовать свойство Error элемента управления Script для получения информации об ошибочном операторе. Но в большинстве случаев элемент управления Script генерирует ошибку автоматизации и не инициализирует объект Error. Обработчик ошибок просто отображает ошибку в окне сообщений.
CodeError:
If ScriptControll.Error.Number <> 0 Then
msg = ScriptControll.Error.Description & bvCrLf
msg =
msg & "В строке " & ScriptControll.Error.Line _
& ", столбце" & ScriptControll.Error.Column
MsgBox msg, ,"Ошибка в сценарии"
Else
MsgBox "ERROR # " & Err.Number & vbCrLf & Err.Description
End If
Наиболее частый источник ошибок - вызов неправильных методов или объектных переменных. Следующий оператор активизирует Excel и вызывает метод Evaluate.
Set EXL = CreateObject ("Excel.Application")
MsgBox "Логарифм числа 99 равен" & EXL.Evaluate ("Log(99)")
Если пропущено имя переменной EXL или приложение Excel отсутствует на машине, то в обоих случаях будет выдано одно сообщение об ошибке автоматизации. Это означает, что сценарий не имеет доступа к объекту. Если вызвать функцию InStr() с ошибочным аргументом (или неправильным числом аргументов), то в обоих случаях появится одно сообщение об ошибке. Объект Error элемента управления Script может локализовать только простые синтаксические ошибки. При работе с объектами элемент управления Script не оказывает существенной помощи.