4

我有应该是嵌套错误检查的 VBA 代码,但它没有。代码是伪代码如下。但是,只要在错误中发生错误(例如,在循环中触发错误,发生goto SmallError,在SmallError 中发生错误),则不使用第二个GoTo。然后错误会破坏代码。

前任:

循环错误

转到小错误

SmallError 中的错误

代码中断(这里的代码应该 GoTo FatalError)

Sub DoThings()
    On Error GoTo SmallError
    'Coding Happens
    Do While(conditionhere)
       'Looping things happen
    GoTo LoopResume
SmallError:
    source = Err.source
    descript = Err.Description
    On Error GoTo Fatal Error
    'Small error processing happens
    Resume LoopResume
FatalError:
    source = Err.source
    descript = Err. Description
    On Error GoTo ExitError
    'Fatal Error processing happens
ExitError:
    Exit Sub
LoopResume:
count = count + 1 
Loop

On Error GoTo FatalError
'Finishing code happens
End Sub
4

2 回答 2

4

您不能在错误处理程序中使用 On Error 语句。参见例如解释这一点的这篇文章

但是,您可以做的是有一个单独的例程来处理“常规错误”。该例程可以有一个“致命错误”处理程序。您的代码将如下所示:

(编辑:编辑代码以在出现致命错误时启用退出):

Sub DoThings()
On Error GoTo SmallError
    Dim fatalExit As Boolean
    'Coding Happens
    Do While(conditionhere)
       'Looping things happen
LoopResume:
       count = count + 1 
    Loop
On Error Goto SmallError2
'Finishing code happens
  Exit Sub
SmallError:
    handleError Err.Source, Err.Description, fatalExit
    If fatalExit Then 
       Exit Sub
    Else
      Resume LoopResume
    End If
SmallError2:
    handleError Err.Source, Err.Description, fatalExit
    Exit Sub
End Sub

Private Sub handleError(ByVal source As String,ByVal description As String, ByRef fatalExit As Boolean)
On Error Goto FatalError
  'Do "small error" handling here
   Exit Sub
FatalError:
  fatalExit = True
  'Do "fatal error" handling here
End Sub
于 2013-04-04T13:32:55.080 回答
0

......你有Fatal Error你的Goto而不是FatalError,那不会让你到正确的位置......

将您的代码更新为:

On Error GoTo FatalError
于 2013-04-04T13:15:45.827 回答