2013-04-04 55 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