2017-01-06 114 views
-1

如何從VBA中的Errorhandler返回for循環?從VBA中的errorhandler返回for循環

for x = 1 to 1000 
    On error goto errorhandler 
    Sheets("Sheet1").Cells(x, "B") = x * Sheets("Sheet1").Cells(x, "A").Value 
continue: 
Next 

Exit sub 

Errorhandler: 
    Sheets("Sheet1").Cells(x,"B") = "Error occured" 
    Resume continue 

這是行不通的。我希望如果在for循環中發生錯誤,它會在單元格中寫入「Error occured」,然後繼續循環。怎麼做?

+0

你是什麼意思「這不起作用」?當我在Excel 2010中測試時,它肯定會達到您期望的效果。 –

+0

這真的不難在Google上找到! – CallumDA

+0

對不起,我在for循環中鍵入了錯誤的數字,但現在它工作。謝謝你的回答! – Coldcode

回答

2
On Error GoTo Errorhandler 'put once, outside loop 
    For x = 1 To 1000 
    'use value2 if you dont work with date/time 
     Sheets("Sheet1").Cells(x, "B").Value2 = x * Sheets("Sheet1").Cells(x, "A").Value2 
    Next 

    Exit Sub 

Errorhandler: 
    Sheets("Sheet1").Cells(x, "B").Value2 = "Error occured" 
    Resume Next '<< Answer to original question. The Resume to continue label should also work 
1

你的代碼的工作,當我測試它,所以我不知道你遇到什麼具體的問題,但是你可以考慮重構代碼,避免GoTo報表,這將提高其可讀性:

Sub foo() 
Dim x As Long 
Dim val 

For x = 1 To 1000 
    On Error Resume Next 
    val = x * Sheets("Sheet1").Cells(x, "A").Value 
    If Err.Number <> 0 Then 
     Sheets("Sheet1").Cells(x, "B") = "Error occured" 
    Else: 
     Sheets("Sheet1").Cells(x, "B") = val 
    End If 
    On Error GoTo 0 
Next 


End Sub 
+0

我想在選擇一個內聯錯誤處理程序(這裏顯示)和一個獨立於正常代碼的執行之間的文體選擇,對我而言,這是基於我期望出現錯誤的頻率。如果我經常遇到錯誤,我會使用聯機。如果我幾乎從不發生錯誤,我會使用一個單獨的塊。 – CodeJockey

+1

@CodeJockey當然,我確實使用了兩種類型的處理,但作爲一般規則,我認爲任何可以避免代碼意大利麪的方法都是可取的,有時這甚至意味着要爲此操作創建子例程/函數,以便錯誤發生並完全在被調用的過程中處理。 –