2016-05-26 145 views
1

我想要做的是如果出現錯誤,某些值會被重置。類似於:錯誤時將值賦給變量

Dim r As Integer 
Dim feeder As String 
Dim origen As String 

On Error GoTo errhandler: 
For j=1 to 100 
    r = Evaluate("=MATCH(1, (C:C=""" & feeder & """) * (D:D=""" & origen & """),0)") 
Next j 

Exit Sub 

errhandler: 
r = 0 
End Sub 

但是,如果出現錯誤,我該如何強制它回到For

+2

首先聲明R作爲循環中的變體。然後使用'isError(r)'來確定你是否做了任何事情。 –

+0

爲什麼它必須在循環中聲明? –

+0

,因爲一旦它被設置爲一個整數,它不會再接受一個錯誤。所以我們需要每次重新定義變量的大小。 –

回答

2

相反ErrHanlding的,你可以使用ISERROR設置上的錯誤的r值:

Sub t1() 
    Dim feeder As String 
    Dim origen As String 
    For j = 1 To 100 
    Dim r As Variant 
    If IsError(Evaluate("=MATCH(1, (C:C=""" & feeder & """) * (D:D=""" & origen & """),0)")) Then 
    r = 0 
    Else 
    r = Evaluate("=MATCH(1, (C:C=""" & feeder & """) * (D:D=""" & origen & """),0)") 
    End If 
    Debug.Print r ' Just for you to check 
Next 

End Sub 
+0

實際上需要「On Error Resume Next」? – user3598756

+0

不用謝了!@ user3598756 – EoinS

+0

@ user3598756不,Iserror陷阱錯誤,所以它永遠不會嘗試在r中輸入錯誤 –

1

只需使用Resume Next聲明

Dim r As Integer 
Dim feeder As String 
Dim origen As String 

On Error GoTo errhandler: 
For j=1 to 100 
    r = Evaluate("=MATCH(1, (C:C=""" & feeder & """) * (D:D=""" & origen & """),0)") 
Next j 

Exit Sub 

errhandler: 
r = 0 
resume Next 

End Sub