Kontakt
DSVGO
Die in VB eingebaute InStr-Funktion erlaubt nur die Suche nach einer bestimmten Buchstabenfolge in einem Text. Oft ist aber nicht jeder Treffer erwünscht, sondern nur diejenigen, welche ein vollständiges, einzeln stehendes Wort bilden. So soll z.B. bei der Suche nach "Haus" nur genau dieser Begriff gefunden werden, nicht aber "Hausboot" oder "Hochhaus".
Mit der unten vorgestellten InStrWord-Funktion wird genau eine solche Wort-Suche ermöglicht. Dazu wird die IsWordSep-Funktion benötigt, welche Word-Trenner erkennt.
MsgBox InStrWord("Hausboot Hochhaus", "haus") 'ergibt 0 MsgBox InStrWord("Ein Haus, wie schön!", "haus") 'ergibt 5
Die Idee ist eigentlich ganz einfach: Es wird im Text mit InStr solange nach dem Wort gesucht, bis das Zeichen direkt vor (und nach) dem gefundenen Wort ein Wort-Trenner (also kein Buchstabe) ist.
Etwas aufpassen muss man am Anfang und Ende des Textes, damit keine unerwünschten VB-Fehlermeldungen erzeugt werden:
Public Function InStrWord( _ ByRef Text As String, _ ByRef Word As String _ ) As Long 'Deklarationen: Dim WordLen As Long Dim TextEnd As Long Dim OK As Boolean WordLen = Len(Word) If WordLen = 0 Then Exit Function TextEnd = Len(Text) - WordLen + 1 InStrWord = InStr(1, Text, Word, vbTextCompare) Do While InStrWord 'Ggf. Zeichen vor dem Wort checken: If InStrWord = 1 Then OK = True Else OK = IsWordSep(Mid$(Text, InStrWord - 1, 1)) End If 'Ggf. Zeichen hinter dem Wort checken: If OK And (InStrWord < TextEnd) Then OK = IsWordSep(Mid$(Text, InStrWord + WordLen, 1)) End If 'Treffer zurückgeben oder weitersuchen: If OK Then Exit Do InStrWord = InStr(InStrWord + WordLen, Text, Word, vbTextCompare) Loop End Function
Diese Funktion gibt genau dann True zurück, wenn das übergebene Zeichen kein Buchstabe ist, also nicht in einem Wort vorkommen darf:
Public Function IsWordSep(ByVal Char As String) As Boolean If Len(Char) Then 'Groß- und Kleinschreibung gleich? If LCase$(Char) = UCase$(Char) Then 'Ausnahme "ß" extra behandeln: If Char <> "ß" Then IsWordSep = True End If End If End Function
Man beachte, wie durch Nutzung der bei Buchstaben (mit einer einzigen Ausnahme) unterschiedlichen Groß-/Kleinschreibung relativ einfach bestimmt werden kann, ob ein Zeichen ein Word-Trenner ist. Durch diese Methode wird sichergestellt, dass auch nicht-deutsche Buchstaben (z.B. mit Akzente) korrekt erkannt werden.
© Jost Schwider, 31.01.2002-31.01.2002 - http://vb-tec.de/instrwrd.htm