В этом примере программа обработки ошибок помещена между инструкциями Exit Sub и End Sub, что позволяет отделить ее от части программы, соответствующей нормальному выполнению процедуры. Программу обработки ошибок можно разместить в любом месте процедуры.
Системные ошибки при вызовах библиотек динамической компоновки (DLL) не приводят к возникновению исключений и не перехватываются средствами Visual Basic. При вызове функций из библиотек DLL необходимо проверять, успешно ли возвращается каждое значение (согласно спецификациям API), и в случае неудачи проверять значение свойства LastDLLError объекта Err.
Оператор Resume используется для продолжения выполнения кода с указанной строки. Эта инструкция может использоваться только в процедурах обработки ошибок. Она имеет несколько форматов (Resume, Resume Next, ResumeСтрока).
Инструкция Error имитирует возникновение ошибки с кодом, переданным ей в качестве аргумента, заполняет свойства объекта Err значениями по умолчанию, после чего вызывает обработчик ошибок. Эта инструкция поддерживается для совместимости с предыдущими версиями. В новой программе, в особенности при создании объектов, следует применять для создания ошибок выполнения метод Raise объекта Err.
Функция CVErr используется для преобразования числового значения, переданного функции в качестве аргумента, в код ошибки. Возвращает значение типа Variant с подтипом Error, содержащее код ошибки, указанный пользователем.
Функция CVErr применяется для создания ошибок, определяемых пользователем, в создаваемых пользователем процедурах. Например, при создании функции, которая принимает несколько аргументов и обычно возвращает строку, имеется возможность проверить, что введенные аргументы попадают в допустимый диапазон значений. Если это не так, весьма вероятно, что функция не вернет ожидаемое значение. В этом случае функция CVErr позволяет вернуть код ошибки, чтобы знать, какие действия необходимо предпринять.
При использовании этой функции неявное преобразование значения Error не допускается. Например, не допускается прямое присвоение возвращаемого значения CVErr переменной с типом, отличным от Variant. Однако имеется возможность выполнить явное преобразование (с помощью CInt, CDbl и т.п.) значения, возвращаемого CVErr, и присвоить это значение переменной с соответствующим типом данных.
В приведенном ниже примере функция WhichRange проверяет введенное пользователем строковое значение переменной UserText на возможность его преобразования в число, принадлежащее диапазону от 1 до 10. Если преобразование не может быть выполнено или полученное число не попадает в заданный диапазон, в качестве результата вырабатывается код ошибки.
Sub CVErr_Example()
Dim VarResult As Variant
Dim UserText As String
‘ Код для ввода значения переменной UserText:
…………………………………….
‘ Вызов функции для преобразования значения переменной:
VarResult = WhichRange(UserText)
‘ Проверка, является ли результат кодом ошибки:
If IsError(VarResult) Then
MsgBox Prompt := “Нужно ввести число от 1 до 10”, _ Title := “Ошибка ввода”
Else
MsgBox Prompt := “Введено число ” & Str(VarResult)