gpt4 book ai didi

excel - 为什么在 VBA 中引发用户定义的错误时需要使用 vbObjectError 常量?

转载 作者:行者123 更新时间:2023-12-04 11:27:28 26 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





What numbers should be used with vbObjectError?

(3 个回答)


2个月前关闭。




Microsoft Visual Basic for Applications 7.1; Version 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

现在,从这个 documentation 引用 Microsoft :

“Visual Basic 错误(Visual Basic 定义的和用户定义的错误)在 0–65535 范围内。0–512 范围保留用于系统错误;513–65535 范围可用于用户定义的错误。

在类模块中将 Number 属性设置为您自己的错误代码时,您将错误代码编号添加到 vbObjectError 常量。例如,要生成错误编号 513,请将 vbObjectError + 513 分配给 Number 属性。”

但是让我困惑的是 vbObjectError常量的值为 -2147221504 .如您所见,如果运行代码, vbObjectError 的总和和 1000513–65535 之间的任何数字距离 513–65535 的范围很远,根据 Microsoft 的说法,该范围可用于用户定义的错误。

如果我需要使用 513–65535 范围内的错误编号,为什么不直接使用这些数字,如 Err.Raise 513Err.Raise 1000 ?

我真的很感谢你们的任何澄清。非常感谢大家。

最佳答案

我终于找到了这个问题的好答案。 Err.Number 的 Microsoft 文档很好地解释了它并提供了这个例子:

' Using Number property with an error from an 
' Automation object
Dim MyError, Msg
' First, strip off the constant added by the object to indicate one
' of its own errors.
MyError = Err.Number - vbObjectError
' If you subtract the vbObjectError constant, and the number is still
' in the range 0-65,535, it is an object-defined error code.
If MyError > 0 And MyError < 65535 Then
Msg = "The object you accessed assigned this number to the error: " _
& MyError & ". The originator of the error was: " _
& Err.Source & ". Press F1 to see originator's Help topic."
' Otherwise it is a Visual Basic error number.
Else
Msg = "This error (# " & Err.Number & ") is a Visual Basic error" & _
" number. Press Help button or F1 for the Visual Basic Help" _
& " topic for this error."
End If
MsgBox Msg, , "Object Error", Err.HelpFile, Err.HelpContext
关键是您应该从 Err.Number 中减去大的负数并执行 Select Case结果上。 0 - 65535 表示错误由 Err.Raise 生成.

关于excel - 为什么在 VBA 中引发用户定义的错误时需要使用 vbObjectError 常量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56040569/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com