Wer zugelieferte Texte oder Texte aus dem Internet weiterverarbeit kennt das Problem, dass diese diverse Satzmängel enthalten können: z. B. Mehrfach-Leerzeichen, -Tabsprünge und -Absatzmarken. Diese zu beseitigen, kann mühsam werden, auch wenn man dazu »Suchen und Ersetzen« verwendet, und die Funktion AutoFormat ist nicht zu Unrecht in den Tiefen der UI-Anpassung versteckt.
Die folgenden Makros verwenden auch die Funktionen von »Suchen und Ersetzen«, nur sind sie bereits so vorbereitet, dass nicht erst nach der passenden Steuerung des Ersetzen-Dialogs gefahndet werden muss.
Wichtig sind zunächst einige Hilfsroutinen, auf die alle Makros zugreifen und die unbedingt mitkopiert werden müssen.
Die Ersetzen-Funktion, die von anderen Makros aufgerufen wird:
Sub ChangeChar(SuchZeichen, ErsatzZeichen, FontSuch, BooleFormat, BooleWildCard)
Dim Steuerz, Feld As Boolean
Feld = ActiveWindow.View.ShowFieldCodes
ActiveWindow.View.ShowFieldCodes = False
Steuerz = ActiveWindow.ActivePane.View.ShowAll
ActiveWindow.ActivePane.View.ShowAll = False
With Selection.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = SuchZeichen
.Font.Name = FontSuch
.Font.Hidden = False
.Replacement.Text = ErsatzZeichen
.Forward = True
.Wrap = wdFindStop
.Format = BooleFormat
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = BooleWildCard
.MatchSoundsLike = False
.MatchAllWordForms = False
.Execute Replace:=wdReplaceAll
End With
ActiveWindow.ActivePane.View.ShowAll = Steuerz
ActiveWindow.View.ShowFieldCodes = Feld
End Sub
Wenn die Makros ohne Markierung aufgerufen werden, kommt eine Sicherheitsabfrage:
Function KeineSelection()
KeineSelection = 0
ksPrompt = "Diese Funktion sollte sicherheitshalber nur innerhalb eines markierten Textteils vorgenommen werden. Trotzdem ausführen?"
ksTitle = "Kein Text markiert"
KeineSelection = MsgBox(ksPrompt, vbYesNo, ksTitle)
End Function
Nun die eigentlichen Austauschmakros:
Mehrfach-Leerzeichen auf eines reduzieren
Sub MehrfachBlanksRaus()
MirDochEgal = vbYes
If (Selection.Start = Selection.End) Then MirDochEgal = KeineSelection
If MirDochEgal = vbYes Then Call ChangeChar(" {2;}", " ", "", False, True)
End Sub
Für Einrückungen missbrauchte führende Leerzeichen entfernen
Sub FuehrendeBlanksRaus()
MirDochEgal = vbYes
If (Selection.Start = Selection.End) Then MirDochEgal = KeineSelection
If MirDochEgal = vbYes Then
Call ChangeChar(" {2;}", " ", "", False, True)
Call ChangeChar("^p ", "^p", "", False, False)
End If
End Sub
Für Einrückungen missbrauchte führende Leerzeichen in Tabsprünge umwandeln
Die Anzahl der Leerzeichen pro Tabsprung können Sie in einer Abfrage bestimmen.
Sub FuehrendeBlanksZuTabs()
MirDochEgal = vbYes
If (Selection.Start = Selection.End) Then MirDochEgal = KeineSelection
If MirDochEgal = vbYes Then
bPrompt = "Wieviele Leerzeichen sollen zu je einem Tabsprung zusammengefasst werden?"
bTitle = "Leerzeichenanzahl"
bDefault = "4"
Anzahl = InputBox(bPrompt, bTitle, bDefault)
Call ChangeChar(" {" & Anzahl & "}", "^t", "", False, True)
Call ChangeChar(" {2;}", " ", "", False, True)
Call ChangeChar("^p ", "^p", "", False, False)
End If
End Sub
Mehrfach-Absatzmarken auf eine reduzieren
Sub AbsatzmarkenRaus()
MirDochEgal = vbYes
If (Selection.Start = Selection.End) Then MirDochEgal = KeineSelection
If MirDochEgal = vbYes Then
Call ChangeChar("^13{2;}", "^13", "", False, True)
Call ChangeChar("^p ", "^p", "", False, False)
End If
End Sub
Absatzmarken durch Leerzeichen ersetzen (Fließtext wiederherstellen)
Sub AbsatzmarkenZuFliesstext()
MirDochEgal = vbYes
If (Selection.Start = Selection.End) Then MirDochEgal = KeineSelection
If MirDochEgal = vbYes Then
Call ChangeChar("^13{2;}", "äöüß", "", False, True)
Call ChangeChar("^13", " ", "", False, False)
Call ChangeChar("äöüß", "^13", "", False, False)
Call ChangeChar(" {2;}", " ", "", False, True)
End If
End Sub
Manuelle Zeilenschaltungen durch Absatzmarken ersetzen
Sub ZeilenschaltungZuAbsatz()
MirDochEgal = vbYes
If (Selection.Start = Selection.End) Then MirDochEgal = KeineSelection
If MirDochEgal = vbYes Then Call ChangeChar("^l", "^13", "", False, False)
End Sub
Manuelle Zeilenschaltungen durch Leerschritte ersetzen
Sub ZeilenendenZuFliesstext()
MirDochEgal = vbYes
If (Selection.Start = Selection.End) Then MirDochEgal = KeineSelection
If MirDochEgal = vbYes Then
Call ChangeChar("^l", " ", "", False, False)
Call ChangeChar(" {2;}", " ", "", False, True)
If Left(Selection, 1) = " " Then Selection.Delete Unit:=wdCharacter, Count:=1
End If
End Sub
Mehrfach-Tabsprünge auf einen reduzieren (wenn Standardtabstopps durch benutzerdefinierte ersetzt werden)
Sub TabsRaus()
MirDochEgal = vbYes
If (Selection.Start = Selection.End) Then MirDochEgal = KeineSelection
If MirDochEgal = vbYes Then Call ChangeChar("^t{2;}", "^t", "", False, True)
End Sub