2016-05-26 20 views
1

Was ich versuche zu tun ist, dass bestimmte Wert zurückgesetzt wird, wenn ein Fehler aufgetreten ist. Etwas wie:Wert einer Variablen bei Fehler zuweisen

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 

Aber wie ich es in die For zu gehen zwingen zurück, wenn ein Fehler ist?

+2

erste declare r als eine Variante in der Schleife. Verwenden Sie dann 'isError (r)', um festzustellen, ob Sie etwas tun oder nicht. –

+0

Warum muss es in der Schleife deklariert werden? –

+0

, denn sobald es auf eine Ganzzahl gesetzt wird, akzeptiert es keinen Fehler mehr. Daher müssen wir die Variable jedes Mal neu dimensionieren. –

Antwort

2

Statt ErrHanlding könnten Sie IsError verwenden Sie den Wert von r auf Fehler zu setzen:

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

Ist "On Error Resume Next" tatsächlich benötigt? – user3598756

+0

Nein danke! @ user3598756 – EoinS

+0

@ user3598756 Nein, der Iserror Traps der Fehler und so wird es nie versuchen, einen Fehler in r zu setzen. –

1

Resume Next Anweisung Verwenden Sie einfach

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 
Verwandte Themen