2013-04-04 85 views
4

我有应该嵌套错误检查的VBA代码,但它没有。代码如下所示。但是,每当在错误中发生错误时(例如,错误在循环中跳闸,就会发生SmallError,并且在SmallError中发生错误)不使用第二个GoTo。该错误然后打破了代码。VBA嵌套错误转到

例:

错误循环

转到SmallError

错误SmallError

码的持续性(这里的代码应该转到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

不能错误处理程序中使用On Error语句。见例如这article that explains this

但是你可以做的是有一个单独的例程来处理“常规错误”。这个例程可能有一个“致命错误”处理程序。然后,您的代码将是这个样子:

(编辑:编辑代码,以使出口时,有一个致命错误):

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 
+0

在这种情况下,致命错误不会退出子。它会退出handleError,但继续使用DoThings。我需要一种方法来退出DoThings子分区致命错误。 – steventnorris 2013-04-04 13:51:33

+0

@steventnorris查看编辑的代码 – GTG 2013-04-04 14:15:56

0

...你在您的中有Fatal Error 210而不是FatalError,是不会让你到正确的位置...

更新您的代码:

On Error GoTo FatalError 
+0

这只是一个错字。道歉。 – steventnorris 2013-04-04 13:49:31