Err.Raise()忽略了自定义描述和来源

use*_*920 5 error-handling vba

我有一个带有Let函数的类模块,它引发了一个自定义错误,示例如下所示

Private pValue As Double
Public Property Let Value(v As Double)
    If v < 0 Then
        Err.Raise vbObjectError + 1, "error source", "error description"
    Else
        pValue = v
    End If

End Property
Run Code Online (Sandbox Code Playgroud)

在另一个子类中,我在一个对象上调用类函数(例子),并通过传递一个小于0的值来引发错误.在同一个子句中,我设置了错误处理,以根据错误号捕获多个错误.

Sub TestSub()
Dim Example As Test
Set Example = New Test

On Error GoTo errorHandler
Example.Value = -1
On Error GoTo 0

Exit Sub

errorHandler:
MsgBox Err.Number & "," & Err.Description & " in " & Err.Source

End Sub
Run Code Online (Sandbox Code Playgroud)

消息框打印出正确的错误号,但描述是对象的通用方法〜失败,源是通用的VBAProject.我真的很喜欢打印出我给Err.Raise的错误信息.有谁知道这里的问题是什么?我有错误处理设置打破未处理的错误.

消息框中显示的消息是:

对象'_Test'的方法'值'失败

编辑:将代码更新为发生问题的完整方案

小智 1

我有同样的问题。我发现当显式键入错误引发类的实例时,行为会发生变化。因此,如果您将类的类型更改为变体,您应该保留自定义错误消息:

Sub TestSub()
  Dim Example As Variant   'use Variant instead of Test to keep your custom error message
  Set Example = New Test

  On Error GoTo errorHandler
  Example.Value = -1
  On Error GoTo 0
  Exit Sub

errorHandler:
  MsgBox Err.Number & "," & Err.Description & " in " & Err.Source
End Sub
Run Code Online (Sandbox Code Playgroud)