2
www.ChF-Online.de  

Text zwischen Tags finden und bearbeiten

   Neuigkeiten
   API-Aufrufe in VBA
   VBA2HTML
   Word
   Word-VBA
aktiv aktiv Verschiedenes
 Dateiname ohne Endung
 Dokumentstrukturanzeige
 Fenster anordnen
 Fensterliste
 Fensterliste (II)
 Kalender erstellen
 Kommentarinformationen
 Lesezeichen
 Beliebigen Ordner öffnen
 Position der Einfügemarke
 Seitenanfang/-ende
 Shapes ansprechen
 Sicherheitskopien erstellen
 Word-Startparameter
 Word-Startparameter II
 Startordner "Bild einfügen"
aktiv  Tags finden u. bearbeiten
 Tags finden/bearbeiten (II)
 Text2WordArt
 Textbausteine verwenden
 Textmarken (I)
 Textmarken (II)
 Überschrift zu Textmarke
 VBA-Konverter
 Wasserzeichen
 Zeichen tauschen
 Feld-Arbeiten
 Form-Sachen
 Menü-/Symbolleisten
 VBA und Lotus Notes
 VBA und Mail
 Inside VBAIDE
 Von Word nach Outlook
 Fix-und-Fertiges/Projekte
   Word2007 (RibbonX)
   Word2010 (RibbonX)
   Outlook-VBA
   Links zu VB(A)
   DocToHelp
   Netport Express XL
   Astronomie
   Gästebuch
   Volltextsuche
   Sitemap
   Buch:Word-Programmierung
   Impressum & Kontakt
   Datenschutzerklärung
Getestet unter Word2000Getestet unter WordXP  
Makro/Datei speichern
Print

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.
Das folgende Beispiel befasst sich mit der Suche 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 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.
Bevor im Range-Objekt gesucht werden kann, muss dieses Range-Objekt (rng) zuerst einmal angelegt werden. Dazu wird der gesamte Dokumenten-Textbereich verwendet, der den zu durchsuchenden Bereich darstellt. Der gefundene Text wird im Range-Objekt rngText abgelegt; dazu wird dieses Objekt als Duplikat des Dokument-Range-Objektes festgelegt; es kann aber auch jeder andere Range-Bereich verwendet werden, z.B.

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.
Damit die Suche erst hinter dem gefundenen End-Tag weitergeführt wird, wird der Range-Bereich rng wieder auf die Endposition reduziert.

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 

 Besucher: 0 online  |  0 heute  |  0 diesen Monat  |  2219113 insgesamt | Seitenaufrufe: 94   Letzte Änderung: 24.06.2006 © 2001-18 Christian Freßdorf
  Warum folgt man der Mehrheit? Etwa weil sie mehr Vernunft besitzt? Nein - weil sie stärker ist.
Blaise Pascal
 powered by phpCMS and PAX