Beitrag aus SmartTools Word Weekly
Begriffe beim 'Suchen und Ersetzen' automatisch formatieren
Word 365 2024 2021 2019 2016 2013
FRAGE Sie hatten kürzlich einen interessanten Tipp zum automatischen Formatieren mittels "Suchen und Ersetzen" veröffentlicht. Konkret ging es um die automatische Fett-Formatierung von Begriffen, die im Text mit einem vorangestellten #-Zeichen und einem angehängten $-Zeichen gekennzeichnet sind – etwa: #Dies in fett$ soll zu Dies in fett werden. Wenn eine solche Ersetzung immer wieder in verschiedenen Dokumenten benötigt wird, würde ein VBA-Makro die Arbeit spürbar erleichtern. Ich habe deshalb selbst ein Makro zum automatischen Suchen und Ersetzen bei gleichzeitiger Formatierung entwickelt, das Sie gerne in Ihrem Newsletter vorstellen dürfen.
E. Golder
ANTWORT Gerne stellen wir Ihr Makro hier vor. Wir haben uns erlaubt, es etwas abzuwandeln, damit individuelle Anpassungen schneller möglich sind.
Aufgabe des Makros ist es, im gesamten Text eines Dokuments nach Begriffen zu suchen, die von bestimmten Start- und Ende-Markern umgeben sind – im Beispiel von "#" vor und "$" hinter dem Begriff. Das Makro formatiert die Fundstellen anschließend in Fettschrift und entfernt die Start-/Ende-Marker.
Zum Erstellen des Makros gehen Sie folgendermaßen vor:
- Drücken Sie Alt + F8 im Word-Fenster, um das Dialogfenster Makros zu öffnen.
- Geben Sie im Feld Makroname folgende Bezeichnung ein:
BegriffeErsetzenFormatieren
- Wählen Sie im Feld Makros in "Normal.dotm (globale Vorlage)" aus.
- Danach klicken Sie auf Erstellen.
- Sie gelangen damit in die Entwicklungsumgebung von Word, in der ein Codefenster mit dem Gerüst der Prozedur "BegriffeErsetzenFormatieren" geöffnet ist. Erweitern Sie den Prozedurcode wie folgt:
Sub BegriffeErsetzenFormatieren()
Dim rng As Range
Dim StartMarker As String
Dim EndMarker As String
StartMarker = "#"
EndMarker = "$"
Set rng = ActiveDocument.Content
With rng.Find
.ClearFormatting
.Replacement.ClearFormatting
.MatchWildcards = True
.Format = True
.Text = StartMarker & "(*)" & EndMarker
.Replacement.Text = "\1"
.Replacement.Font.Bold = True
.Forward = True
.MatchCase = False
.MatchWholeWord = False
.MatchAllWordForms = False
.MatchSoundsLike = False
End With
rng.Find.Execute _
Wrap:=wdFindContinue, _
Replace:=wdReplaceAll
Set rng = Nothing
MsgBox Prompt:="Die Ersetzungen wurden erfolgreich durchgeführt.", _
Buttons:=vbInformation, _
Title:="Suchen und Ersetzen"
End Sub
- Wenn Sie mit eigenen Start- und Ende-Markern für die zu ersetzenden Begriffe arbeiten wollen, passen Sie am Anfang des Prozedurcodes folgende Zeilen an:
StartMarker = "#"
EndMarker = "$"
- Wenn die Begriffe in Ihrem Fall beispielsweise von den Zeichen "%" und "&" umgeben sind, ändern Sie die Zeilen in:
StartMarker = "%"
EndMarker = "&"
- Drücken Sie Strg + S, um den Code zu speichern.
- Verlassen Sie die Entwicklungsumgebung per Datei-Schließen und zurück zu Microsoft Word.
Um das Makro schneller aufrufen zu können, weisen Sie ihm eine Tastenkombination zu. Das erreichen Sie mit folgenden Schritten:
- Klicken Sie mit der rechten Maustaste auf eines der Menübandregister und wählen Sie im Kontextmenü Menüband anpassen an.
- Im danach angezeigten Dialogfenster klicken Sie unter der linken Befehlsliste neben Tastenkombinationen auf die Schaltfläche Anpassen.
- Blättern Sie im Listenfeld Kategorien nach unten und markieren Sie den Eintrag "Makros".
- Im Listenfeld Makros markieren Sie nun den Namen des Suchen-und-Ersetzen-Makros – hier also "BegriffeErsetzenFormatieren".
- Anschließend klicken Sie einmal im Feld Neue Tastenkombination, und dann drücken Sie die Tastenkombination, die Sie dem Makro zuweisen wollen. Achten Sie darauf, dass das Kürzel noch nicht vergeben ist, - zu erkennen am Hinweis neben Derzeit zugewiesen an. Wenn die Tastenkombination schon belegt ist, löschen Sie Ihre Eingabe per Backspace-Taste und versuchen Sie es dann mit einem anderen Kürzel.
- Klicken Sie auf Zuordnen.
- Verlassen Sie das Dialogfenster mit einem Klick auf Schließen.
- Schließen Sie dann auch das Dialogfenster der Word-Optionen.
Wann immer Sie nun das Suchen und Ersetzen bei gleichzeitigem Formatieren durchführen wollen, müssen Sie nur ein Dokument mit den gekennzeichneten Begriffen öffnen und die oben festgelegte Tastenkombination drücken. Der Vorgang dauert meist nur Sekundenbruchteile und am Ende erscheint eine Abschlussmeldung.

Was das Makro nicht verrät, ist die Anzahl der durchgeführten Ersetzungen. Das liegt daran, dass ".Find.Execute" keinen entsprechenden Wert zurückgibt. Wenn Sie wissen möchten, wie viele Ersetzungen durchgeführt wurden, müssen Sie eine Schleife in den Code einbauen, die den Ersetzen-Vorgang im Einzelschrittverfahren simuliert, ohne tatsächlich etwas zu ersetzen, und dabei eine Zählervariable hochzählen.
Fügen Sie dazu im Makrocode unter dem With-Block und vor der folgenden Zeile:
rng.Find.Execute _
Wrap:=wdFindContinue, _
Replace:=wdReplaceAll
diese Codezeilen ein:
Dim lngCounter As Long
lngCounter = 0
Do While rng.Find.Execute(Wrap:=wdFindStop)
lngCounter = lngCounter + 1
rng.Collapse wdCollapseEnd
Loop
Die Zählervariable können Sie dann auch in der MsgBox-Funktion der Abschlussmeldung verwenden:
MsgBox Prompt:="Es wurden " & CStr(lngCounter) & _
" Ersetzungen durchgeführt.", _
Buttons:=vbInformation, _
Title:="Suchen und Ersetzen"
So erhalten Sie zwar mehr Infos, aber der Ersetzen-Vorgang dauert aufgrund der Einzelschritt-Schleife deutlich länger.