thomas1972
Goto Top

In Access 2010 Wörter aus textfeld im memofeld suchen und hervorheben

Hallo, ich habe folgendes Problem.

In einem Textfeld werden verschiedene Wörter eingegeben,
Diese Wörter sollen in einem anderen Textfeld gesucht und dann markiert werden.

Problem hierbei da es sich um ein reines text formatiertes textfeld handelt

Vielleicht kann mir hier jemand helfen

Content-Key: 223338

Url: https://administrator.de/contentid/223338

Printed on: April 24, 2024 at 04:04 o'clock

Member: colinardo
colinardo Nov 30, 2013 updated at 14:41:07 (UTC)
Goto Top
Hallo Thomas,
das kannst du z.B. wie folgt erreichen:
Im Beispiel ist txtSearch das Suchfeld in das der Begriff eingegeben wird, und txtContent das Feld in dem danach gesucht wird.
Wird ein Treffer gefunden wird dieser im Memofeld selektiert.
Private Sub btnSuche_Click()
    txtSearch.SetFocus
    sWord = txtSearch.Text
    txtContent.SetFocus
    sContent = txtContent.Text
    'Suche Anfangsposition des Suchwortes  
    sPosition = InStr(1, sContent, sWord, vbTextCompare)
    'Wenn ein Treffer gefunden wurde setze die Auswahl auf ihn  
    If sPosition > 0 Then
        txtContent.SelStart = sPosition - 1
        txtContent.SelLength = Len(sWord)
    End If
End Sub
Das ganze lässt sich auch noch so erweitern das bei mehreren Treffern diese nacheinander markiert werden.
Wie dies aussehen könnte kannst du an dieser Demo-Access-Datenbank nachvollziehen.

Grüße Uwe
Member: thomas1972
thomas1972 Nov 30, 2013 at 18:45:21 (UTC)
Goto Top
Hallo Uwe, vielen dank für deinen Hilfe

es wird in den Fällen ja immer nur ein Wort "der reihe nach" markiert. Besteht irgendwie die Möglichkeit alle Wörter gleichzeitig hervorgehoben angezeigt zu bekommen?
Oder muss dazu das textfeld richtext formatiert sein um dann per vba einfach die gesuchten Felder hervor zu heben?
Die Frage wäre dann wie dieses am besten per vba möglich wäre
Member: colinardo
colinardo Nov 30, 2013 at 19:08:21 (UTC)
Goto Top
Zitat von @thomas1972:
Besteht irgendwie die Möglichkeit alle
Wörter gleichzeitig hervorgehoben angezeigt zu bekommen?
Oder muss dazu das textfeld richtext formatiert sein um dann per vba einfach die gesuchten Felder hervor zu heben?
Ja, es muss in diesem Fall ein Richtext-Feld sein. Mit einem Nur-Text-Feld lässt sich leider nicht viel mehr machen, da eine Selektion nicht gesplittet werden kann. Hingegen bei einem Richtext-Feld z.B. alle gefundenen Wörter grün eingefârbt werden kônnten.
Die Frage wäre dann wie dieses am besten per vba möglich wäre
mit ein paar zusätzlichen Zeilen in der Schleife der Demo-DB müsste das kein großer Aufwand sein.
Melde mich dazu morgen nochmal mit einem Beispiel.

Schönes Advent's-Wochenende noch
Grüße Uwe
Member: thomas1972
thomas1972 Nov 30, 2013 at 22:04:07 (UTC)
Goto Top
Hallo Uwe,

vielen dank für die bisherige Unterstützung
wünsche dir ebenfalls einen schönen ersten Advent

Gruß Thomas
Member: colinardo
colinardo Dec 01, 2013, updated at Apr 01, 2016 at 12:49:03 (UTC)
Goto Top
So hier mal die Variante mit der Markierung aller Fundstellen mit Hilfe eines Richtext-Feldes: Download Demo-DB

3ab0078b6b74f207f7b9138846e818b0

Grüße Uwe
Member: thomas1972
thomas1972 Dec 01, 2013 at 10:38:48 (UTC)
Goto Top
Hallo Uwe, vielen dank für deine Hilfe am heutigen tag,
perfekt soweit.


Es funktioniert soweit wenn die Wörter zusammen hintereinander im Text stehen.
was muss am Script geändert werden, damit er jedes Wort findet.

In deinem Screenshot Beispiel Suchbegriff
nulla pretium ante

Danke für deine Mühe
Member: colinardo
colinardo Dec 01, 2013 at 10:44:01 (UTC)
Goto Top
Im Script folgende Zeile:
 regex.Pattern = "(" & sWord & ")"
so abändern
 regex.Pattern = "(" & Replace(sWord, " ", "|") & ")"
face-wink Uwe
Member: thomas1972
thomas1972 Dec 01, 2013 at 16:47:06 (UTC)
Goto Top
Hallo Uwe,
genau das wars face-wink

hab nur eine Kleinigkeit noch
gebe ich als Suchbegriff
nulla pretiu* ante
ein, so findet er zwar mein Ergebnis, markiert aber nicht mehr die Wörter mit *

Hast du hier nochmal einen letzten Ansatz
Member: colinardo
colinardo Dec 01, 2013, updated at Dec 02, 2013 at 09:59:45 (UTC)
Goto Top
ich Moment sucht das Script nur Wortgenau ohne Wildcards. Da die Suche auf Regular Expressions basiert, kannst du aber diese Möglichkeit nutzen, wenn du die "Replaces" der Regex-Sonderzeichen im Script löschst. Du solltest dich dann aber vorher mit Regular Expressions beschäftigen, dann stehen dir unbegrenzte Suchmöglichkeiten offen...

Alternativ wenn du nur den Stern als Wildcard-Zeichen nutzen musst du diesen Abschnitt, so abändern:
 'Replace special chars in search term for regex pattern
        sWord = Replace(sWord, "\", "\\")
        sWord = Replace(sWord, "[", "\[")
        sWord = Replace(sWord, "]", "\]")
        sWord = Replace(sWord, "+", "\+")
        sWord = Replace(sWord, "^", "\^")
        sWord = Replace(sWord, "$", "\$")
        sWord = Replace(sWord, "{", "\{")
        sWord = Replace(sWord, "}", "\}")
        sWord = Replace(sWord, ".", "\.")
        sWord = Replace(sWord, "?", "\?")
        sWord = Replace(sWord, "*", "[\S]*")
Grüße Uwe