Juli 14, 2020, 21:35:24

Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!


Texteil (RichText-Spalte) in Access-Tabelle farblich formatieren

Begonnen von Joosy, Juni 07, 2020, 11:17:32

⏪ vorheriges - nächstes ⏩

Joosy

Sehr geehrte Community,
durch VBA, lese ich eine Access-Tabelle (Recordset) aus einer Spalte mit Textformatierung RichText und möchte darin einen Textbereich farblich markieren.

Öffnen und lesen ...
Do Until ...EOF
   ...
Loop
... ist alles kein Problem. Wie kann ich aber in der Datensatzzeile (RichText-Spalte) ein bestimmtes Wort nun farblich markieren?

DF6GL

Hallo,

indem Du den Plain-Text  an der entspr. Stelle mit den passenden RTF-Tags versiehst. 

Joosy

Ich habe mich hier festgefahren:

Public Sub FeldinhalteFormatieren()
   Dim rstWordBook As Recordset, rstWordRedMarked As Recordset
   Dim strWordBook As String
   Dim intMarkedPos As Integer
   
   Set rstWordBook = CurrentDb.OpenRecordset("tblWoerterbuch", dbOpenDynaset)
   Set rstWordRedMarked = CurrentDb.OpenRecordset("tblWoerterRotMarkieren", dbOpenDynaset)
   Do Until rstWordBook.EOF
      strWordBook = rstWordBook.Fields("Suchwort").Value
      Do Until rstWordRedMarked.EOF
         intMarkedPos = InStr(rstWordRedMarked.Fields("en_US").Value, strWordBook) 'Die Zielspaltenbezeichnung muss variabler angepasst werden bzw. aus der Tabelle ausgelesen werden
         Do Until intMarkedPos = 0 ' In der selbigen Zeile weitersuchen
            'Hier <-- Zunächst das Erstgefundene Rot markieren
            'With rstWordRedMarked
               '.Edit
                 ????
               '.Update
            'End With
            intMarkedPos = InStr(intMarkedPos + 1, rstWordRedMarked.Fields("en_US").Value, strWordBook) 'Den nächstmöglichen Eintrag finden
         Loop
         rstWordRedMarked.MoveNext
      Loop
      rstWordBook.MoveNext
   Loop
   'MsgBox str

exitSub:
   If Not (rstWordBook Is Nothing) Then rstWordBook.Close: Set rstWordBook = Nothing
   If Not (rstWordRedMarked Is Nothing) Then rstWordRedMarked.Close: Set rstWordRedMarked = Nothing
   Exit Sub
End Sub

DF6GL

Hallo,
[code][/code]
in "rstWordRedMarked.Fields("en_US").Value"   befindet sich doch der Plain-Text und gefunden hast Du die Stelle auch ("intMarkedPos")

Umgebe also an dieser Stelle das Wort (musst Du halt noch ausschneiden) mit den RTF-Tags und füge die Komposition wieder in den Gesamtstring ein.


Aus einem Word-RTF-Dokument:

{\rtlch\fcs1 \af31507 \ltrch\fcs0 \cf6\insrsid10495848\charrsid10495848 TextMitRoterFarbe}



Aus    http://www.pindari.com/rtf1.html  ( oder anderen Websites, wonach Du selber googlen könntest)

ZitatThis line is the default color
This line is red
This line is the default color

With the default setting my Word application created an RTF file which was 2,460 bytes and contained coding which isn't relevant to the primary task of producing this output. After some experimenting I was able to produce the same output with the following RTF code when the text was saved in a file with an .rtf extension:

{\rtf1\ansi\deff0
{\colortbl;\red0\green0\blue0;\red255\green0\blue0;}
This line is the default color\line
\cf2
This line is red\line
\cf1
This line is the default color
}

Note that any space before the \ symbol is included in the text of the document, so exclude them. To include the \ symbol in your document you use \\




Joosy

Vielleicht verstehe ich da etwas nicht richtig oder möchte es mir instinktiv nur leicht machen?

         Do Until intMarkedPos = 0 ' In der selbigen Zeile weitersuchen
            'Hier <-- Zunächst das Erstgefundene Rot markieren
            strReplace = Replace(rstWordRedMarked.Fields("en_US").Value, strWordBook, "<FONT COLOR=''#FF0000''>" & strWordBook)
            With rstWordRedMarked
               .Edit
               .Fields("en_US").Value = strReplace
               .Update
            End With
            intMarkedPos = InStr(intMarkedPos + 1, rstWordRedMarked.Fields("en_US").Value, strWordBook) 'Den nächstmöglichen Eintrag finden
         Loop

DF6GL

Hallo,

vermutlich beides..  ;)
Zitat
"<FONT COLOR=''#FF0000''>"


dürfte keine RTF-Codierung sein.


HTML und RTF sind zwei verschiedene Thematiken.