Bedingte Formatierung für einen Text in Word 2013
Das ist jetzt zwar keine Administrative Frage aber vielleicht hat trotzdem jemand eine Idee.
Ich habe einen sehr langen Text in Word (mehrere 100 Seiten lang). Hierbei handelt es sich um einen Verlauf eines Schriftverkehrs zweier Personen.
Bsp.:
Datum Uhrzeit Herr Maier: text
Datum Uhrzeit Herr Maier: text
Datum Uhrzeit Frau Müller: text
Datum Uhrzeit Herr Maier: text
Datum Uhrzeit Frau Müller: text
Datum Uhrzeit Frau Müller: text
Datum Uhrzeit Herr Maier: text
Ich würde gerne automatisch die zeile bzw. den gesamten Text von Frau Müller einfäben. Evtl. funktioniert dies auch mit einem Makro.
Ich habe leider keinen Ansatz hierfür finden können.
Ich habe einen sehr langen Text in Word (mehrere 100 Seiten lang). Hierbei handelt es sich um einen Verlauf eines Schriftverkehrs zweier Personen.
Bsp.:
Datum Uhrzeit Herr Maier: text
Datum Uhrzeit Herr Maier: text
Datum Uhrzeit Frau Müller: text
Datum Uhrzeit Herr Maier: text
Datum Uhrzeit Frau Müller: text
Datum Uhrzeit Frau Müller: text
Datum Uhrzeit Herr Maier: text
Ich würde gerne automatisch die zeile bzw. den gesamten Text von Frau Müller einfäben. Evtl. funktioniert dies auch mit einem Makro.
Ich habe leider keinen Ansatz hierfür finden können.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 279042
Url: https://administrator.de/forum/bedingte-formatierung-fuer-einen-text-in-word-2013-279042.html
Ausgedruckt am: 09.04.2025 um 16:04 Uhr
14 Kommentare
Neuester Kommentar
Hallo SauerJochen,
das könnte mit einem Makro so aussehen:
Ich bin jetzt einfach mal davon ausgegangen das dein Datum in dieser Weise formatiert ist
Also eine Zeile bspw. so aussieht:
Die Markierung ist in dieser Variante temporär, d.h bei einer Änderung am Dokument verschwindet sie wieder (Es ist wie das Highlighting bei einer Suche). Soll der Text permanent eigefärbt werden muss das Makro so abgeändert werden.
Grüße Uwe
das könnte mit einem Makro so aussehen:
Ich bin jetzt einfach mal davon ausgegangen das dein Datum in dieser Weise formatiert ist
TT.MM.YYYY
.Also eine Zeile bspw. so aussieht:
10.06.2015 09:00 Frau Müller: BlaBlaBla Bla
Temporäres Highlighting
Sub FindAndColor()
Dim regex As Object, matches As Object, match As Object, strName As String
'Regex Objekt und Optionen
Set regex = CreateObject("vbscript.regexp")
regex.IgnoreCase = True: regex.Global = True
' Zur Eingabe des Namens auffordern
strName = InputBox("Geben sie den Namen ein:", "Abschnitte hervorheben", "Frau Müller")
' Wenn Name leer oder Abbrechen, Prozedur beenden
If strName = "" Then Exit Sub
'Suchpattern setzen
regex.Pattern = "(" & strName & ":[\s\S]*?)(\d{2}\.\d{2}\.\d{2,4}|$)"
' Vorherige markierung entfernen
Selection.Find.ClearHitHighlight
With ActiveDocument
'SUche ausführen
Set matches = regex.Execute(.Content.Text)
If matches.Count > 0 Then
' Für jeden Treffer die betreffende Stelle markieren
For Each match In matches
Selection.HomeKey Unit:=wdStory
Selection.Find.HitHighlight FindText:=match.Submatches(0), HIghlightColor:=wdColorYellow, MatchCase:=False, MatchWholeWord:=False, MatchWildcards:=False, MatchAllWordForms:=False, MatchSoundsLike:=False
Next
End If
End With
Set regex = Nothing
End Sub
Permanente Markierung
Sub FindAndColor()
Dim regex As Object, matches As Object, match As Object, strName As String
'Regex Objekt und Optionen
Set regex = CreateObject("vbscript.regexp")
regex.IgnoreCase = True: regex.Global = True
' Zur Eingabe des Namens auffordern
strName = InputBox("Geben sie den Namen ein:", "Abschnitte hervorheben", "Frau Müller")
' Wenn Name leer oder Abbrechen, Prozedur beenden
If strName = "" Then Exit Sub
'Suchpattern setzen
regex.Pattern = "(" & strName & ":[\s\S]*?)(\d{2}\.\d{2}\.\d{2,4}|$)"
' Vorherige markierung entfernen
With ActiveDocument
'Suche ausführen
Set matches = regex.Execute(.Content.Text)
If matches.Count > 0 Then
Selection.HomeKey Unit:=wdStory
' Für jeden Treffer die betreffende Stelle markieren
For Each match In matches
With Selection.Find
.ClearFormatting
.Text = match.Submatches(0)
.Forward = True
.Wrap = wdFindContinue
.MatchCase = False
.MatchWholeWord = False
.MatchAllWordForms = False
.MatchWildcards = False
.MatchSoundsLike = False
.Execute
Selection.Range.HighlightColorIndex = wdYellow
End With
Next
End If
End With
Set regex = Nothing
End Sub
Grüße Uwe
Zitat von @joe2017:
Mein Datum hat folgendes Format. Ich weiß nicht ob dies eine Rolle spielt.
26. Okt. 2014 22:15 - Frau Müller: blablabla
Das spielt eine sehr wichtige Rolle, denn ich muss ja für jeden Block das Ende bestimmen können. Für diese Art Datum musst du den Regex-Pattern in Zeile 11 so anpassen:Mein Datum hat folgendes Format. Ich weiß nicht ob dies eine Rolle spielt.
26. Okt. 2014 22:15 - Frau Müller: blablabla
regex.Pattern = "(" & strName & ":[\s\S]*?)(\d{1,2}\.? \w{3}\. \d{4}|$)"
danke für die Info. Jedoch tut sich mit dem Makro überhaupt nichts?
Geht hier problemlos ... oder sind die Datumwerte "Felder" ? Bitte hinter dem eingegebenen Namen keine Leerzeichen einfügen.Lad doch mal dein Dokument anonymisiert irgendwo hoch, ansonsten ist das Raten mit der Glaskugel was bei dir anders ist...Danke
Hi,
sorry das es so lange gedauert hat, aber ich bin im Moment ziemlich eingespannt.
Grüße Uwe
sorry das es so lange gedauert hat, aber ich bin im Moment ziemlich eingespannt.
Jedoch würde ich gerne die ganze Zeile einfärben. Aktuell wird das Vorangestellte Datum nicht eingefärbt.
Um das gewünschte zu erreichen fügst du noch folgende Zeile zwischen Zeile 30 und 31 ein:Selection.MoveStartUntil vbNewLine, wdBackward
Ja das ist eine Beschränkung der maximalen Zeichen der Suchfunktion, ist mir gerade auch erst aufgefallen, mit Word mache ich nicht so oft VBA, sorry.
In dem Fall sollte das hier funktionieren:
Grüße Uwe
In dem Fall sollte das hier funktionieren:
Sub FindAndColor()
Dim regex As Object, matches As Object, match As Object, strName As String
'Regex Objekt und Optionen
Set regex = CreateObject("vbscript.regexp")
regex.IgnoreCase = True: regex.Global = True
' Zur Eingabe des Namens auffordern
strName = InputBox("Geben sie den Namen ein:", "Abschnitte hervorheben", "Frau Müller")
' Wenn Name leer oder Abbrechen, Prozedur beenden
If strName = "" Then Exit Sub
'Suchpattern setzen
regex.Pattern = "(" & strName & ":)[\s\S]*?(\d{1,2}\.? \w{3}\. \d{4}|.{5}$)"
' Vorherige markierung entfernen
With ActiveDocument
'Suche ausführen
Set matches = regex.Execute(.Content.Text)
If matches.Count > 0 Then
Selection.HomeKey Unit:=wdStory
' Für jeden Treffer die betreffende Stelle markieren
For Each match In matches
With Selection.Find
.ClearFormatting
.Text = match.Submatches(0) & "*" & match.Submatches(1)
.Forward = True
.Wrap = wdFindContinue
.MatchCase = False
.MatchWholeWord = False
.MatchAllWordForms = False
.MatchWildcards = True
.MatchSoundsLike = False
.Execute
Selection.MoveStartUntil vbNewLine, wdBackward
Selection.MoveEndUntil vbNewLine, wdBackward
Selection.Range.HighlightColorIndex = wdYellow
Selection.Collapse wdCollapseEnd
End With
Next
End If
End With
Set regex = Nothing
End Sub