问题描述
让我们假设以下代码:
Module1:
Sub main()
Dim cl As New Class2
On Error GoTo errorhandler1
cl.DoWork
On Error GoTo 0
Exit Sub
errorhandler1:
MsgBox (Err.Description)
End Sub
Class1:
Event MyEvent()
Public Sub DoWork()
RaiseEvent MyEvent
End Sub
Class2:
Private WithEvents cl As Class1
Private Sub cl_MyEvent()
Call Err.Raise(123, , "ErrorInClass")
End Sub
Private Sub Class_Initialize()
Set cl = New Class1
End Sub
Public Sub DoWork()
cl.DoWork
End Sub
我希望errorhandler1启动,并显示带有err.Description的MsgBox.但是,它却引发了我运行时错误.
I expect errorhandler1 to launch and MsgBox with err.Description to be shown.But it throws me runtime error instead.
在EventHandlers例程中如何处理错误?
What I have to do to handle errors within EventHandlers routines?
推荐答案
我们可以阅读此处:
但是在这种情况下,没有启用的错误处理程序.
But in this case there is no enabled error handler.
也许您可以通知class2的客户工作失败.在这里,因为class2的客户端是一个标准模块,所以您不能使用class2的事件,所以也许一个简单的只读属性可能对您有帮助?
Maybe you could inform the client of class2 that the work failed. Here because the client of class2 is a standard module you can't use events from class2, so maybe just a simple read-only property might help here?
Sub main()
cl.DoWork
If Not cl.IsWorkOk Then MsgBox "Work failed..."
On Error GoTo 0
Exit Sub
errorhandler1:
MsgBox (Err.Description)
End Sub
Private m_isWorkOk As Boolean
Private Sub cl_MyEvent()
On Error GoTo ErrMyEvent
Call Err.Raise(123, , "ErrorInClass")
m_isWorkOk = True
Exit Sub
ErrMyEvent:
m_isWorkOk = False
End Sub
Public Property Get IsWorkOk() As Boolean
IsWorkOk = m_isWorkOk
End Property
这篇关于发生错误时,Goto在EventHandler子内部不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!