2016-06-09 16 views
0

Ich habe ein Makro gemacht, um die Kopffarbe eines Dokuments zu ändern, aber wenn das Ende des Dokuments erreicht wird - oder wenn es keine verbleibende Kopfzeile gibt - bekomme ich ein Error.Wie man eine Do-Schleife in einem MS Word-Makro beendet

Was ich will ist nach der letzten Kopfzeile, am Ende des Dokuments, um meine Do-Schleife zu beenden.

Hier ist mein Code:

Sub Changecolortest5() 
' 
' Changecolortest5 Macro 
' 
' 
    If ActiveWindow.View.SplitSpecial <> wdPaneNone Then 
     ActiveWindow.Panes(2).Close 
    End If 
    If ActiveWindow.ActivePane.View.Type = wdNormalView Or ActiveWindow. _ 
     ActivePane.View.Type = wdOutlineView Then 
     ActiveWindow.ActivePane.View.Type = wdPrintView 
    End If 
    Do 
    ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader 
    Selection.MoveDown Unit:=wdParagraph, Count:=1, Extend:=wdExtend 
    Selection.Font.Color = 8527984 
    ActiveWindow.ActivePane.View.NextHeaderFooter 
    Loop 
'Exit Header and Footer 
    ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument 
End Sub 

Antwort

0

Adressierung Kopf-/Fußzeilen optimal nicht gut mit aufgezeichneten Makros funktionieren, also werde ich Ihnen zeigen, einen etwas anderen Ansatz als das, was Sie uns geben. Der folgende Code funktioniert direkt mit den zugrunde liegenden Objekten und wendet Formatierung auf dem Range anstelle einer Auswahl an. Dies ist schneller und der Bildschirm flackert nicht.

Wenn Sie mit einer Gruppe von Dingen wie Kopfzeilen arbeiten, ist es üblicher, eine For-Each-Schleife zu verwenden, um durch die Gruppe zu gehen. In diesem Fall sind die Header für Abschnitte spezifisch, sodass Sie die Abschnitte in eine Schleife einfügen. Etwas in dieser Richtung:

Dim doc as Word.Document 
Dim sec as Word.Section 

Set doc = ActiveDocument 
For Each sec in doc.Sections 
    sec.Headers(wdHeaderFooterPrimary).Range.Paragraphs(1).Range.Font.Color = 8527984 
    sec.Headers(wdHeaderFooterFirstPage).Range.Paragraphs(1).Range.Font.Color = 8527984 
Next 

Darüber hinaus, wenn Sie das Hilfethema für Do nachschlagen Schleifen Sie werden sehen, dass sie erfordern einen Test die Schleife zu beenden: Do While oder Do Until oder Loop While oder Loop Until einer bestimmten Kriterium ist erfüllt. Ich bin ziemlich sicher, dass der Code, den Sie uns zeigen, Ihnen einen Fehler geben muss - wenn Sie Fragen stellen, sollten Sie immer alle relevante Informationen einschließen, einschließlich möglicher Fehlermeldungen ...

+0

Hallo @Cindy danke für Ihre Hilfe, was ich tat in meinem Code ist nur einige On Error GoTo setzen, so wird es auch weiterhin Fehler haben. Kannst du mir helfen, das Flimmern zu entfernen? Ich kann meinen Code wegen der Zeichenbeschränkung nicht einfügen. i fügen Sie nur die eine i ActiveWindow.ActivePane.View.NextHeaderFooter On Error GoTo hinzufügen Hilfe Schleife Hilfe: ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument Selection.HomeKey Einheit: = wdStory End Sub –

+0

Ihr Makro ist gut und es ist nur ein Wimpernschlag. aber es ist der ganze Kopf gefärbt Ich möchte nur die erste Reihe des Headers färben. so [Bitte klicken] (http://i66.tinypic.com/3038sa9.jpg) –

+0

Sie können den Link [Bearbeiten] unter Ihrer Frage immer verwenden, um zusätzliche Informationen wie ein Bild hinzuzufügen. Ich bin momentan auf einem mobilen Gerät, werde aber versuchen, später noch Zeit zu finden. –