2016-03-11 113 views
0

在下面的代碼Errorhandler正確處理當我輸入未打開的工作簿或任何隨機字符串時的第一個錯誤。但是當我點擊重試並再次輸入一個隨機名稱時,我會收到「Subscript out of Range」錯誤@ Workbooks(工作簿名稱)。啓用。Excel VBA錯誤處理不適用於第二個錯誤

任何人都可以幫助我爲什麼發生這種情況,我該如何讓它工作。我嘗試了很多東西。但沒有任何工作。此代碼是更大程序的一部分。

Sub test() 

Dim workbkname As String 
On Error GoTo Errorhandler 
Retry: 

workbookname = InputBox("Enter workbook name:", _ 
         "Name Enrty") 
If StrPtr(workbookname) = 0 Then 
    MsgBox ("Aborting Program") 
    End 
End If 

Workbooks(workbookname).Activate 
Exit Sub 

Errorhandler: 
Response = MsgBox("Workbook " & workbookname & " not found", vbRetryCancel) 
If Response = 4 Then 
    GoTo Retry 

End If 

End Sub 
+2

使用'Resume Retry'而不是'GoTo Retry' –

回答

1

的這裏的問題是,VBA錯誤處理程序不清除錯誤,一旦給定像GoTo一個指令。因此,代碼認爲它在錯誤處理例程中遇到錯誤,從而將錯誤向上引發。

爲了清除錯誤,則必須調用Resume與恢復(或Resume單獨再次運行錯誤代碼,Resume Next恢復的代碼下面的錯誤行,或Resume可以稱爲其次的地方一個標籤,如下:

Sub ErrTest 
    On Error Goto ErrHndl 
    For i = 0 to 5 
     a = 1/i 
nextiLabel: 
    Next i 

    Exit Sub 
ErrHndl: 
    Resume nextiLabel 
End Sub 

您還可以使用Err.Clear()刪除錯誤,但這是不太推薦

這裏看到更多的信息:Error Handling in Excel