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)
| 归档时间: |
|
| 查看次数: |
692 次 |
| 最近记录: |