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


Anonymer Benutzer #1

54 Monaten zuvor
Punktzahl 0++
Funktioniert leider nicht mit Word 2010

BLinz

54 Monaten zuvor
Punktzahl 0++

Moin,

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

Gruß

Bernhard

Anonymer Benutzer #2

41 Monaten zuvor
Punktzahl 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

41 Monaten zuvor
Punktzahl 0++
Um so besser - wir reden aber von Word 2010? Oder schon 2013?

Anonymer Benutzer #3

11 Monaten zuvor
Punktzahl 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

Anonymer Benutzer #3

11 Monaten zuvor
Punktzahl 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

11 Monaten zuvor
Punktzahl 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.

Anonymer Benutzer #3

11 Monaten zuvor
Punktzahl 0++
Beispiele gibt es - allerdings nicht in der Kombination mit der Fußzeile. Und mit Selection.Find wird leider nur die Hauptseite durchsucht.

Anonymer Benutzer #4

einem Monat zuvor
Punktzahl 0++

Hallo und guten Tag

Irgendwie funktioniert das bei Word 2016 nicht. Das MAkro ist in einem Add-in :-( Bis 2013 funktioniert es.

Anonymer Benutzer #4

einem Monat zuvor
Punktzahl 0++
OK, Makro hatte sich deaktiviert :-(

Anonymer Benutzer #5

einem Monat zuvor
Punktzahl 0++
Hallo ich habe das Makro gerade ausgeführt. Bei mir werden nur die Wörter in den Texten aber nicht in den Kopfzeilen ausgetauscht. Ich nutze Word 2013.

BLinz

einem Monat zuvor
Punktzahl 0++

Man müsste prüfen ob es die Bereiche wie "wdFirstPageHeaderStory" noch gibt. Allerdings habe ich das bei einem Kunden mit Office 2016 im Einsatz ... bisher hatte ich dort keine Beschwerden gehört das es nicht mehr ginge.

Mal blöd gefragt: Den zu ersetzenden Text gibt es aber auch?

Anonymer Benutzer #5

einem Monat zuvor
Punktzahl 0++
Ja den gibt es, ich habe gerade gesehen das er aber in einem Textfeld innerhalb der Kopfzeile steht. Das könnte der Grund sein. Gibt es dafür eine Lösung? Ich möchte eigentlich auch garnicht suchen und ersetzen. Sondern alle Seitenzahlen auf denen ein Wort steht. Hatte aber gehofft das ich den Code so ändern kann. Das Wort hat er aber nicht ersetzt also geht er villeicht nicht in Textfelder?

BLinz

einem Monat zuvor
Punktzahl 0++

Textfelder funktionieren anders, die können direkt Namentlich angesprochen werden. Ich hatte mich gegen Textfelder entschieden da ich mit Suchen & Ersetzen flexibler bin

Ohne Testen weis ich nicht ob es auch in denen geht - habe ich aber gerade keine Zeit zu.

Anonymer Benutzer #5

einem Monat zuvor
Punktzahl 0++
Okay ich hatte gehofft das das suchen und ersetzen überall funktionert aber vielen Dank dann suche ich weiter:)
Kommentar hinzufügen
znilwiki freut sich über alle Kommentare. Sofern du nicht anonym bleiben möchtest, registriere dich bitte oder melde dich an.