Aktuelle Seite:
/vba/vbafindreplace2.htm
Letzte Änderung: 10.07.2006

Getestet unter Word2000Getestet unter WordXPGetestet unter Word2003  
Makro/Datei speichern
Print

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.
Beispieltext:

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)