gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 11:22:18 26 4
gpt4 key购买 nike

我有一个带有 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 的值引发错误。在同一个子程序中,我设置了错误处理以根据错误编号捕获多个错误。
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 的错误消息。有谁知道这里的问题是什么?我将错误处理设置为中断未处理的错误。

消息框中显示的消息是:

Method 'Value' of object '_Test' failed



编辑:将代码更新为出现问题的完整场景

最佳答案

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

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

关于vba - Err.Raise() 忽略自定义描述和来源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31234805/

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