Text zwischen Tags finden und bearbeiten (II) |
|
|||||||||||||||||||||
Ausgehend von dem Makro fkt_Search() in Text zwischen Tags finden und bearbeiten, in dem die Such-Tags mitmarkiert und bearbeitet werden, werden in diesem geänderten Makro wahlweise die Tags einbezogen oder nur der Text zwischen den Tags berücksichtigt. Das folgende Beispiel sucht nach Texten, die zwischen zwei Tags (Start- und End-Tag) eingeschlossen sind. 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 soll nur der hervorgehobene Text zwischen den Tags berücksichtigt werden: Dieses ist ein <|Beispieltext|> für die Suche nach <|Tags|> Anhand des optionalen boolschen Parameters bInclude kann gesteuert werden, ob die Tags in eine Aktion einbezogen werden sollen oder nicht; standardmäßig ist bInclude = False, also ohne Tags vorgegeben. Zum Reduzieren des Fundbereichs (rngText) wird das Range-Objekt um die Länge der Start- und End-Tags reduziert und neu gesetzt rngText.SetRange rngText.Start + Len(strStart), rngText.End - Len(strEnd) Das geänderte Makro sieht dann folgendermaßen aus, wobei sich die auszuführende Aktion auch in ein separates Makro auslagern lässt, dem jeweils nur die angepassten Range-Objekte mitgegeben werden. Function fkt_Search2(strStart As String, strEnd As String, Optional bInclude As Boolean = False) 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 bInclude = True Then ' mit Tags ' Beispiel: einfärben rngText.Select rngText.Font.Color = wdColorAqua ElseIf bInclude = False Then ' ohne Tags ' Beispiel: einfärben rngText.SetRange rngText.Start + Len(strStart), rngText.End - Len(strEnd) rngText.Select rngText.Font.Color = wdColorAqua 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 die Tags mitmarkiert werde sollen oder nur der Text zwischen den Tags. Sub subSearch2() fkt_Search2 "#", "#", False End Sub |
www.chf-online.de/vba/vbafindreplace2.htm | © 2001-11 Christian Freßdorf (Zaphod-Systems) |