Почему нам нужно использовать константу vbObjectError при возникновении пользовательских ошибок в VBA? - PullRequest
0 голосов
/ 08 мая 2019

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?

Я был бы очень признателен за любые разъяснения от вас, ребята,Спасибо всем большое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...