2017-09-28 2 views
0

Obwohl habe ich deutlich die Fehler blockiertFehlerbehandlung in VBA für Word

For Each sentence In ActiveDocument.Paragraphs 
    j = j + 1 
    On Error GoTo hey: 
    third_word(j) = sentence.Range.Words(3) 
    sw(j) = sentence.Range.Words(2) 
    tot_sent(j) = sentence.Range.Text 

hey: 

Next 

Der Code noch wirft Fehler 5941: das angeforderte Element Sammlung existiert nicht. Das ist genau die Art von Fehler, den ich versuche zu vermeiden und den Code weitermachen zu lassen. Viele der Absätze haben kein drittes Wort, deshalb möchte ich nur einen Satz in das Array tot_sent setzen, wenn der Satz ein drittes Wort hat. Der beste Weg dazu ist die Fehlerbehandlung, aber es funktioniert nicht.

+0

Entfernen Doppelpunkt in GoTo-Anweisung –

+0

Das hat nicht funktioniert. – bobsmith76

+0

Ich würde sagen, verwende die Antwort von @MichaelO. - ist es besser, den Fehler überhaupt zu vermeiden. Ich denke, Ihre Fehlerbehandlung wird nicht zurückgesetzt, nachdem es ausgelöst wird - entweder verschieben Sie 'hey:' aus dem Verfahren mit 'Exit Sub: hey:: Fortsetzen : End Sub' oder fügen Sie' On Fehler Gehe zu "1" nach deinem "hey:" Label. –

Antwort

1

Es ist besser für die Bedingungen zu überprüfen, die zu Fehlern führen können, aber wenn Sie wirklich On Error verwenden möchten, dann müssen Sie Resume einmal ein Fehler aufgetreten ist. Wenn Sie nach der Verarbeitung des Fehlers nicht den Wert Resume eingeben, befinden Sie sich noch im Fehlerbehandlungsmodus, und alle nachfolgenden Fehler können nicht abgefangen werden.

For Each sentence In ActiveDocument.Paragraphs 
    j = j + 1 
    On Error GoTo hey: 
    third_word(j) = sentence.Range.Words(3) 
    sw(j) = sentence.Range.Words(2) 
    tot_sent(j) = sentence.Range.Text 

ResumePoint: 

Next 

'... 
'... 

Exit Sub 

hey: 
    ' perform whatever processing is required for the error 
    '... 
    Resume ResumePoint 

End Sub 
4

Try this:

For Each sentence In ActiveDocument.Paragraphs 
    j = j + 1 
    If sentence.Range.Words.Count > 2 Then 
     third_word(j) = sentence.Range.Words(3) 
     sw(j) = sentence.Range.Words(2) 
     tot_sent(j) = sentence.Range.Text 
    End If 
Next 
+0

danke das hat es getan. Ich hätte daran denken können. – bobsmith76