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...