2017-04-26 7 views
1

Bitte leite mich verwenden, wie kann ich wieder direkt "s = s + 1" wenn ich Störung erhalte im SPRD = Application.Find ("", XWord). Bitte führen.Wie IfError GoTo Nächste Funktion

For xx = 2 To 15494 
xword = Cells(s, m) 

If xword <> "" Then 
le = Len(xword) 
sprd = Application.Find(",", xword)'' If I am getting Error 
old_sprd = sprd 
's = 1 
Star = 1 
Do While sprd <> 0 

word = Mid(xword, Star, sprd - 1) 
xword = Mid(xword, sprd + 1, le) 
s = s + 1 
Rows(s).Insert 
Cells(s, m) = word 
sprd = Application.Find(",", xword) 
If IsError(sprd) Then sprd = 0 
If sprd = 0 Then 
s = s + 1 
Rows(s).Insert 
Cells(s, m) = xword 
End If 
le = Len(xword) 

Loop 
End If 

s = s + 1 '' My Code supposed to directing divert in This line. 
Next 
+0

Sie durchlaufen xx, aber es gibt keine Verwendung von xx in Ihrem Code? – Luuklag

+1

Warum benutzen Sie nicht 'Instr' statt' Application.Find'? Es wird 0 zurückgegeben, wenn die Suchzeichenfolge nicht gefunden wird, und nicht ein Fehlerwert. – Rory

Antwort

1

Statt Application.Find Verwendung InStr (und tauschen die Argumente):

sprd = InStr(xword, ",") 

Das keinen Fehler erzeugen, und ist effizienter.

Wenn keine Übereinstimmung gefunden wird, sprd wird Null, und so wird Ihre Do While Schleife übersprungen werden.

0

Etwas wie this?

On Error Goto JumpHere: 
i = 1/0 'throws error 
i = 2 'this line is never executed 
JumpHere: 
i = 1 'code resumes here after error in line 2 

Hoffe, das hilft!

1

der folgende Code beantwortet Ihre Frage gestellt:

For xx = 2 To 15494 
    xword = Cells(s, m) 

    If xword <> "" Then 
    le = Len(xword) 
    On Error GoTo NextLine 
    sprd = Application.Find(",", xword) '' If I am getting Error 
    On Error GoTo 0 
    old_sprd = sprd 
    's = 1 
    Star = 1 
    Do While sprd <> 0 

    word = Mid(xword, Star, sprd - 1) 
    xword = Mid(xword, sprd + 1, le) 
    s = s + 1 
    Rows(s).Insert 
    Cells(s, m) = word 
    sprd = Application.Find(",", xword) 
    If IsError(sprd) Then sprd = 0 
    If sprd = 0 Then 
    s = s + 1 
    Rows(s).Insert 
    Cells(s, m) = xword 
    End If 
    le = Len(xword) 

    Loop 
    End If 
NextLine: 
    s = s + 1 '' My Code supposed to directing divert in This line. 
Next 

Grundsätzlich gibt es drei Änderungen: (1) kurz vor den Application.Find Befehl ausgeben gibt es eine Zeile VBA zu sagen, was im Fall eines Fehlers zu tun --> sollte es gehen zu NextLine. NewLine ist wie ein Lesezeichen und kann einen beliebigen Namen haben. Sie müssen VBA nur mitteilen, wo sich dieses Lesezeichen befindet. Das ist die zweite Änderung in Ihrem Code: (2) Hinzufügen einer Zeile kurz vor s = s + 1 sagt VBA, dass dies das "Lesezeichen" ist, das NewLine genannt wird. Die dritte Änderung besteht darin, VBA mitzuteilen, dieses "Lesezeichen" nur zu verwenden, wenn der Fehler in der Zeile Application.Find auftritt. In allen anderen Fällen sollte VBA den Fehler nur an Sie (den Benutzer) zurückgeben. Also, (3) direkt nach der Linie Application.Find die error trapping is being turned off again.

Dennoch wäre eine bessere Lösung zu verwenden sein InStr() wie so:

For xx = 2 To 15494 
    xword = Cells(s, m) 
    If xword <> "" Then 
     le = Len(xword) 
     If InStr(1, xword, ",", vbTextCompare) Then 
      sprd = Application.Find(",", xword) 
      old_sprd = sprd 
      Star = 1 
      Do While sprd <> 0 
       word = Mid(xword, Star, sprd - 1) 
       xword = Mid(xword, sprd + 1, le) 
       s = s + 1 
       Rows(s).Insert 
       Cells(s, m) = word 
       sprd = Application.Find(",", xword) 
       If IsError(sprd) Then sprd = 0 
       If sprd = 0 Then 
        s = s + 1 
        Rows(s).Insert 
        Cells(s, m) = xword 
       End If 
       le = Len(xword) 
      Loop 
     End If 
    End If 
    s = s + 1 '' My Code supposed to directing divert in This line. 
Next xx