0
我有一個類c1
,它調用另一個類c2
的方法。我想要c2
生成的錯誤被c1
捕獲和處理,這會將錯誤的描述添加到集合中。代碼相關的功能如下:在拋出異常時VBA中的錯誤處理不一致
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
C2:
Public Sub doSomethingElse(someValue as string)
If Not xyz(someValue) Then
Err.Raise 516, "doSomethingElse", "xyz: " & someValue
Else
DoOtherThings
End Sub
當我設置錯誤捕獲到 「處理錯誤破發」,有時Err.Raise
在doSomethingElse
會將錯誤提高到doSomething
,但有時它只會停止執行,並顯示運行時錯誤,就像doSomething
沒有On Error
條件一樣。 rs
中的第一條記錄通常會導致錯誤提升到doSomething
,但第二條記錄總是會導致運行時錯誤。有時第一個記錄也會引發運行時錯誤。
在doSomething
的第一次迭代Do While
循環之後發生了什麼事情,該循環關閉了錯誤處理?
我把它移到循環中,但我得到了同樣的結果:第一次工作,然後第二次通過循環我得到運行時錯誤,沒有處理。 – sigil
什麼是錯誤? –
這是用戶定義的錯誤,我扔在'doSomethingElse()'。 – sigil