2017-01-06 1 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 물론, 두 가지 유형의 핸들링을 모두 사용하지만 일반적으로 코드 스파게티를 피할 수있는 모든 것이 좋다고 생각합니다. 때로는이 작업을위한 서브 루틴/함수를 만드는 것을 의미하기도합니다. 오류가 발생하여 호출 된 프로 시저에서 전적으로 처리됩니다. –