假设我有以下课程:
class Class1
Sub error1(): Err.Raise 1, "", "Error1": End Sub
Sub error2(): Err.Raise 1, "", "Error2": End Sub
end class
现在我有了这个模块:
Sub ErrorInClass()
Dim c As New Class1
'Raise a handled exception
On Error Resume Next
Call c.error1
On Error GoTo 0
'Raise an unhandled exception
Call c.error2
End Sub
以下是一些观察结果:
有时我们在类中的类中包含类,中间有多个计算步骤,这样破坏模块就没有什么意义。所以我们可能会选择“闯入课堂模块”;但我们根本无法处理错误...解决这个问题的最佳 VBA 设计模式是什么?
不确定目前最好的行动方案是什么。但我确实有一个想法是使用
OnErrorResumeNext
类标志:
class Class1
Private LastErrorText as String
Public OnErrorResumeNext as Boolean
Public Property Get ErrorText() as String
ErrorText = LastErrorText
End Property
Sub Error1()
Call RaiseError("Error1")
End Sub
Sub Error2()
Call RaiseError("Error2")
End Sub
Private Sub RaiseError(ByVal message as string)
if OnErrorResumeNext then
LastErrorText = message
else
Err.Raise vbObjectError, "Class1", message
end if
End Sub
end class
Sub ErrorInClass()
Dim c As New Class1
'Raise a handled exception
c.OnErrorResumeNext = true
Call c.error1
c.OnErrorResumeNext = false
'if needed check ErrorText
Debug.Print "ERROR: " & c.ErrorText
'Raise an unhandled exception
Call c.error2
End Sub