Hallo zusammen,
für meine Bewerbung erstelle ich zahlreiche Vorlagen, die teilweise bis auf kleine Unterschiede identisch sind.
Da ich häufig Ergänzungen oder Ersetzungen vorzunehmen habe und ich nicht jedes Mal alle Vorlagen manuell ändern möchte, wollte ich mir ein Makro hierfür erstellen.
Ich habe mich einmal an den Code gewagt:
Sub ErsetzenDokumentenübergreifend()
Dim docDoc As Document
Dim shapeTF As Shape
Dim strOld As String
Dim strNew As String
strOld = "Text zuvor" 'Anpassen
strNew = "Text danach" 'Anpassen
For Each docDoc In Documents
docDoc.Activate
For Each shapeTF In docDoc.Shapes
shapeTF.Select
With Selection.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = strOld
.Replacement.Text = strNew
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = True
.MatchWholeWord = True
End With
Selection.Find.Execute Replace:=wdReplaceAll
Next shapeTF
Selection.HomeKey unit:=wdStory
With Selection.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = strOld
.Replacement.Text = strNew
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = True
.MatchWholeWord = True
End With
Selection.Find.Execute Replace:=wdReplaceAll
Next docDoc
End Sub
Leider funktioniert dieser Algo nicht zuverlässig. An ein paar Testungen hat es funktioniert, manchmal jedoch klappt es auch nur im aktuell geöffneten Dokument.
Könnte mir da jemand auf die Sprünge helfen, wo der Fehler liegen könnte?
PS: Die innere For Each - Schleife klappert die ganzen Shapes des Dokuments ab, da ich schon herausgefunden habe, dass ich nur im selektierten Textfeld etwas Suchen&Ersetzen kann (oder ich weiß einfach nicht, wie es besser geht)...
Ich nutze Microsoft Office Word 2010 und habe kaum Erfahrung mit VBA.
Für konstruktive Vorschläge bin ich sehr dankbar.
LG Martin
|