Text zwischen Tags finden und bearbeiten |
|
|||||||||||||||||||||
Die Suchen-Funktion bzw. Suchen-und-Ersetzen-Funktion ist auch in VBA eine mächtige Funktion, die eine Vielzahl von Möglichkeiten mit sich bringt. Dieses ist ein <|Beispieltext|> für die Suche nach <|Tags|> In diesem Beispielsatz soll nach dem Text zwischen den Tags <| und |> gesucht werden; dabei sollen die Tags mitberücksichtigt werden. Als Ergebnis sollte der hervorgehobene Text entweder nur markiert oder ggf. auch gelöscht werden: Dieses ist ein <|Beispieltext|> für die Suche nach <|Tags|> Die nachfolgende Funktion verwendet nur das Range-Objekt, um im Text bestimmte Bereiche zu markieren und zu bearbeiten. Set rngText = ActiveDocument.Range(0,0) Anschließend wird der Range-Bereich reduziert, indem der Anfang hinter das gefunden Start-Tag verschoben wird (rng.SetRange) Danach wird im neuen Range-Bereich nach dem End-Tag gesucht. Wenn der End-Tag nicht gefunden wird, wird die Funktion beendet. Wird das End-Tag gefunden, wird der Range-Bereich rngText bis zum Ende des End-Tags erweitert. Über die Zusatzoption wird dann gesteuert, was mit dem gefundenen Text geschehen soll: nur farblich hervorheben oder löschen. Anschließend wird erneut nach dem Start-Tag gesucht. Und sofern ein weiteres Start-Tag gefunden wird (.Found = True), greift die Do...Loop-Schleife und es erfolgt ein erneuter Suchlauf nach dem End-Tag. Function fkt_Search(strStart As String, strEnd As String, bDelete As Boolean) Dim rng As Range Dim rngText As Range ' Range festlegen Set rng = ActiveDocument.Range ' Range festlegen Set rngText = ActiveDocument.Range(0, 0) rngText.Collapse wdCollapseStart ' Such-Schleife With rng.Find .Format = False .Text = strStart ' Suche nach Start-Tag .Execute Do While .Found = True ' Fundstelle mit Start-Tag anlegen rngText.SetRange rng.Start, rng.End ' Suchtextbereich reduzieren rng.SetRange rng.End, ActiveDocument.Range.End ' Suche nach End-Tag .Execute FindText:=strEnd, Forward:=True ' Abbruch wenn kein End-Tag If .Found = False Then Exit Function ' Fundstelle bis End-Tag erweitern rngText.SetRange rngText.Start, rng.End If bDelete = False Then ' fablich hervorheben rngText.Select rngText.Font.Color = wdColorAqua Else ' löschen rngText.Delete End If ' Suchtextbereich zur Endposition reduzieren rng.Collapse wdCollapseEnd ' Start-Tag suchen .Execute FindText:=strStart, Forward:=True Loop rng.Collapse wdCollapseEnd End With End Function Der Aufruf erfolgt aus einer Prozedur heraus, wobei als Parameter die Zeichenkette für das Start- und End-Tag angegeben werden muss sowie die Angabe, ob der Text nur markiert oder gelöscht werden soll. Sub SearchAndReplace() fkt_Search "<|", "|>", False End Sub |
www.chf-online.de/vba/vbafindreplace.htm | © 2001-11 Christian Freßdorf (Zaphod-Systems) |