我有一个类c1
,它调用另一个类c2
的方法。我希望c2
生成的c1
生成的错误被Private Function doSomething(ByRef rs As DAO.Recordset) As Collection
Dim errors as Collection
Set errors = New Collection
On Error GoTo logError
Do While Not rs.EOF
c2.doSomethingElse rs!someValue
GoTo continueLoop
logError:
errors.Add (Err.Description)
continueLoop:
rs.MoveNext
Loop
Set doSomething = errors
End Function
捕获并处理,这会将错误的描述添加到集合中。相关功能的代码如下:
C1:
Public Sub doSomethingElse(someValue as string)
If Not xyz(someValue) Then
Err.Raise 516, "doSomethingElse", "xyz: " & someValue
Else
DoOtherThings
End Sub
C2:
Err.Raise
当我将错误陷阱设置为“中断未处理的错误”时,有时doSomethingElse
中的doSomething
会将错误提升到doSomething
,但有时它会暂停执行运行时错误,好像On Error
没有rs
条件。 doSomething
中的第一条记录通常会导致错误提升到Do While
,但第二条记录会导致运行时错误。有时第一条记录也会抛出运行时错误。
在我doSomething
中{{1}}循环的第一次迭代后,是否会发生某些事情,从而关闭错误处理?
答案 0 :(得分:0)
错误处理只会发生一次错误。
当rs.movenext通过循环发回例程时,错误将不再起作用。
在错误处理后放入Resume continueLoop。 以下代码适用于我。
Private Sub Command1_Click()
doSomething
End Sub
Private Function doSomething() As Collection
Dim errors As Collection
Set errors = New Collection
On Error GoTo logError
Do
doSomethingElse ("someValue")
GoTo continueLoop
logError:
errors.Add (Err.Description)
Resume continueLoop
continueLoop:
Loop
Set doSomething = errors
End Function
Public Sub doSomethingElse(someValue As String)
Err.Raise 516, "doSomethingElse", "xyz: " & someValue
End Sub
如果适合您,请务必将此标记为正确答案。