Microsoft Visual Basic для приложений 7.1;Версия 1088
Я создал собственный обработчик ошибок, следуя интерактивным учебным пособиям, и использую его уже около года, но до сих пор не получаю ту часть, где vbObjectError
константадобавляется к номеру между 513-65535, который зарезервирован для пользовательских ошибок.В большинстве руководств рекомендуется использовать Err.Raise vbOjectError + 1000
в качестве примера для генерации пользовательских ошибок.Причина этого заключается в том, чтобы избежать совпадения с ошибками 0-512, которые зарезервированы для системных ошибок.Если бы мне пришлось написать код для этой идеи, код выглядел бы так:
Option Explicit
Sub raiseError()
On Error GoTo errorHandler
Dim x As Double
Dim y As Double
Let x = 4.8
Let y = 5.5
If x <> y Then
Err.Raise vbObjectError + 1000
End If
errorHandler:
Select Case Err.Number
Case vbEmpty
MsgBox "alright!"
Case vbObjectError + 1000
MsgBox ("User-defined error '" & Err.Number & "':" & _
vbNewLine & _
vbNewLine & _
"X is not equal to Y")
Case Is <> vbObjectError + 1000
MsgBox "All other errors"
End Select
End Sub
Теперь, цитируя Microsoft из этой документации :
"Visual Basicошибки (как определяемые пользователем Visual Basic, так и определяемые пользователем ошибки) находятся в диапазоне 0–65535. Диапазон 0–512 зарезервирован для системных ошибок, диапазон 513–65535 доступен для пользовательских ошибок.
При установке для свойства Number собственного кода ошибки в модуле класса вы добавляете номер кода ошибки в константу vbObjectError. Например, чтобы сгенерировать ошибку с номером 513, присвойте vbObjectError + 513 свойству Number. "
Но меня смущает то, что vbObjectError
константа имеет значение -2147221504
.Как вы можете видеть, если вы запускаете код, сумма vbObjectError
и 1000
или любое число между 513–65535
далеко от диапазона 513–65535, который доступен для пользовательских ошибок согласно Microsoft.
Если мне нужно использовать номера ошибок в диапазоне 513–65535
, почему бы не использовать эти цифры напрямую, например Err.Raise 513
или Err.Raise 1000
?
Я был бы очень признателен за любые разъяснения от вас, ребята,Спасибо всем большое.