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

Aus Znilwiki
Wechseln zu: Navigation, Suche

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

Kommentare


80.146.186.166

1439 Tage zuvor
Punkte 0+-
Funktioniert leider nicht mit Word 2010

BLinz

1428 Tage zuvor
Punkte 0+-

Moin,

funktioniert 100% mit Word - eventuell musst du mal an der Makrosicherheit schrauben - oder ob beim herauskopieren alles richtig übernommen wurde.

Gruß

Bernhard

hcgast@siebener-kurier.de

1026 Tage zuvor
Punkte 0+-

Vielleicth hat Microsoft etwas an Word verändert. Seit kurzem sind zumindest bei mir die zeilen hinter "- nun noch der Rest" überflüssig geworden. Möglicherweise seit dem letzten Update. Mit den Story-Ranges erfasse ich neuerdings auch in weiteren Sections alle Kopf- und Fußzeilen. mfg

Chris

BLinz

1026 Tage zuvor
Punkte 0+-
Um so besser - wir reden aber von Word 2010? Oder schon 2013?

Philipp

147 Tage zuvor
Punkte 0+-

Hallo, bin gerade auf das Makro gestoßen, ich möchte damit jedoch mehrere Dokumente gleichzeitig bearbeiten (ca 80 Stück), da ich immer in einer Betriebsanleitung eine Maschinen-Seriennummer austauschen muss. Ist das auch möglich? Ich versuche schon, auf alle aktiven Dokumente anzuwenden, leider wird nur auf das vorderste geöffnete Dokument ausgeführt.

Danke

Philipp

147 Tage zuvor
Punkte 0+-
Noch vergessen: Wir benutzen immer noch Word 2010, das Makro läuft auch erfolgreich. In der Fußzeile ist eine Tabelle, hier muss die Nummer im ersten Feld getauscht werden. Außerdem muss im zweiten Feld noch die Inventarnummer getauscht werden. Das mach ich momentan auf 2x mit einem anderen Suchtext im Makro.

BLinz

147 Tage zuvor
Punkte 0+-

Möglich ja - müsste man um die Schleife noch eine Schleife bauen welche alle geöffneten Dokumente durchgeht.

Es gibt bestimmt auf Google ein Beispiel dafür.

Philipp

147 Tage zuvor
Punkte 0+-
Beispiele gibt es - allerdings nicht in der Kombination mit der Fußzeile. Und mit Selection.Find wird leider nur die Hauptseite durchsucht.
Kommentar hinzufügen:
Gebe hier einen Kommentar ein. Du kannst einen beliebigen Namen oder eine Email-Adresse als Namen angeben.

Wenn du dich einloggst wird automatisch dein Benutzername genommen.
Du kannst KEINE Links hier posten - das wurde wegen anhaltender Werbung deaktiviert. Sobald ein '''http://''' im Text vorkommt wird der Kommentar verworfen Alle anderen Steuerzeichen oder Funktionen wie < br > werden ausgefiltert - zum Posten von Quelltexten ist diese Funktion hier nicht geeignet.

Falls du dringendere Fragen hast kannst du auch das Support-System von znil.net nutzen unter support.znil.net