Aktionen

Office:Word2010 Suchen und Ersetzen mit VBA auch in Kopf- und Fußzeile

Aus znilwiki

Suchen und Ersetzen in Word mit VBA in Word ist ganz leicht ... von wegen!

Kleiner Test: Erstellen Sie ein Dokument mit einem Text "xyz" - und schreiben Sie doch diesen Text auch einmal in die Kopf- oder Fußzeile.
Wenn Sie das ganze von Hand machen - kein Problem, Word ersetzt den Text sowohl im Dokumentenbereich als auch in der Kopf- und Fußzeile.

Wenn Sie das selbe aber per VBA Makro machen, so wird nur der Text im Dokumentenbereich ersetzt - die Kopf- und Fußzeile bleiben außen vor.

Das liegt daran das das Dokument Word-Intern aus Bereichen besteht:

StoryRange Beschreibung
wdMainTextStory Hauptdokumentbereich
wdFootnotesStory Fussnotenbereich
wdEndnotesStory Endnotenbereich
wdCommentsStory Kommentarbereich
wdTextFrameStory Textfeldbereich
wdFirstPageHeaderStory Kopfzeile 1.Seite
wdFirstPageFooterStory Fusszeile 1.Seite
wdPrimaryHeaderStory Kopfzeile ungerade Seiten
wdPrimaryFooterStory Fusszeile ungerade Seiten
wdEvenPagesHeaderStory Kopfzeile gerade Seiten
wdEvenPagesFooterStory Fusszeile gerade Seiten

Um also per VBA in allen Bereichen zu ersetzen müssen auch alle Bereiche explizit angesprochen werden.

Hier ein fertiges Makro dazu:

Sub Find_and_Replace_whole_Document()
    'Juni 2011 Bernhard Linz
    'Bernhard.Linz@datagroup.de
    'admin@znil.net
    '
    'Sucht und Ersetzt auch in der Kopf- und Fußzeile
    'In vielen Teilen aus den Beispielen der Word-Hilfe abgeschrieben
    'Den Rest mit Makro Aufzeichnen.
    Dim oStory As Range
    For Each oStory In ActiveDocument.StoryRanges
        oStory.Find.ClearFormatting
        oStory.Find.Replacement.ClearFormatting
        With oStory.Find
            .Text = "mich bitte ersetzen"
            .Replacement.Text = "durch diesen Text"
            .Forward = True
            .Wrap = wdFindContinue
            .Format = False
            .MatchCase = True
            .MatchWholeWord = True
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
        End With
        oStory.Find.Execute Replace:=wdReplaceAll
        'Jetzt haben wir den Hauptbereich abgearbeitet - nun noch der Rest
        While Not (oStory.NextStoryRange Is Nothing)
            Set oStory = oStory.NextStoryRange
            oStory.Find.ClearFormatting
            oStory.Find.Replacement.ClearFormatting
            With oStory.Find
                .Text = "mich bitte ersetzen"
                .Replacement.Text = "durch diesen Text"
                .Forward = True
                .Wrap = wdFindContinue
                .Format = False
                .MatchCase = True
                .MatchWholeWord = True
                .MatchWildcards = False
                .MatchSoundsLike = False
                .MatchAllWordForms = False
            End With
            oStory.Find.Execute Replace:=wdReplaceAll
        Wend
    Next
End Sub
Loading comments...