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

时间:2015-07-05 20:41:06

标签: vba error-handling

我有一个带有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

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

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

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

消息框中显示的消息是:

  

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

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

2 个答案:

答案 0 :(得分:0)

也无法在Windows上重现。

通过菜单Debug - Compile VBA Project

尝试“重新编译”

有时它有助于解决这些奇怪的错误

答案 1 :(得分:0)

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

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