Beschreibung
Es gibt Fälle, in denen in Worddokumenten der Zellenhintergrund in Tabellen abhängig vom Text der Tabellenzelle gesetzt werden muss. Wenn das im ganzen Dokument nach dem gleichen Regelwerk erfolgen soll, kann ein Makro die Arbeit deutlich vereinfachen.
Das folgende Makro habe ich daher auf Nachfrage eines Blogbesuchers erstellt. Das Makro durchsucht alle Tabellen im geöffneten Dokument nach zwei vorgegebenen Zeichenketten (case-sensitiv!), die über die beiden Variablen strString1 und strString2 definiert sind. Aktuell sind die Zeichenketten „orange“ und „rot“ eingestellt.
strString1 = "orange" strString2 = "rot"
Die Zellenhintergrundfarben werden über die beiden Variablen lFarbe1 und lFarbe2 definiert.
lFarbe1 = 49407 ' orange lFarbe2 = wdColorRed ' rot
lFarbe1 definiert dabei die Farbe für die Zeichenkette strString1, lFarbe2 für strString2.
Sourcecode
Public Sub ZellenhintergrundFaerben()
' Definition der Zelleninhalte für die Hintergrundfarben
Dim strString1 As String
Dim strString2 As String
strString1 = "orange"
strString2 = "rot"
' Definition der Zelleninhalte für die Hintergrundfarben
Dim lFarbe1 As Long
Dim lFarbe2 As Long
lFarbe1 = 49407 ' orange
lFarbe2 = wdColorRed ' rot
On Error GoTo NoDocumentOpen
If Len(ActiveDocument.Name) = 0 Then GoTo NoDocumentOpen
Dim oCurTable As Table
Dim strCurCellText As String
For Each oCurTable In ActiveDocument.Tables
Dim oCurRow As Row
With oCurTable
For Each oCurRow In .Rows
Dim oCurCell As Cell
For Each oCurCell In oCurRow.Cells
' Bildschirmaktualisierung abschalten
Application.ScreenUpdating = False
' Zelleinhalt ermitteln und ggfs. um 2 Stellen kürzen
strCurCellText = oCurCell.Range
If Len(strCurCellText) >= 2 Then
strCurCellText = Left(strCurCellText, Len(strCurCellText) - 2)
End If
' Zellenhintergrundfarbe setzen
If StrComp(strCurCellText, strString1) = 0 Then
oCurCell.Shading.BackgroundPatternColor = lFarbe1
ElseIf StrComp(strCurCellText, strString2) = 0 Then
oCurCell.Shading.BackgroundPatternColor = lFarbe2
End If
Next oCurCell
Next oCurRow
End With
Next oCurTable
NoDocumentOpen:
' Bildschirmaktualisierung einschalten
Application.ScreenUpdating = True
End Sub
Und hier noch eine erweiterte Version, falls nicht nur für die Zelle mit der gesuchten Zeichenkette selbst, sondern auch für die linke Nachbarzelle (sofern vorhanden) der Zellenhintergrund gesetzt werden soll.
Sourcecode (auch den Zellenhintergrund der linken Nachbarzelle setzen)
Public Sub ZellenhintergrundFaerben()
' Definition der Zelleninhalte für die Hintergrundfarben
Dim strString1 As String
Dim strString2 As String
strString1 = "orange"
strString2 = "rot"
' Definition der Zelleninhalte für die Hintergrundfarben
Dim lFarbe1 As Long
Dim lFarbe2 As Long
lFarbe1 = 49407 ' orange
lFarbe2 = wdColorRed ' rot
On Error GoTo NoDocumentOpen
If Len(ActiveDocument.Name) = 0 Then GoTo NoDocumentOpen
Dim oCurTable As Table
Dim strCurCellText As String
For Each oCurTable In ActiveDocument.Tables
Dim oCurRow As Row
With oCurTable
For Each oCurRow In .Rows
Dim oCurCell As Cell
For Each oCurCell In oCurRow.Cells
' Bildschirmaktualisierung abschalten
Application.ScreenUpdating = False
' Zelleinhalt ermitteln und ggfs. um 2 Stellen kürzen
strCurCellText = oCurCell.Range
If Len(strCurCellText) >= 2 Then
strCurCellText = Left(strCurCellText, Len(strCurCellText) - 2)
End If
If StrComp(strCurCellText, strString1) = 0 Then
' Zellenhintergrundfarbe setzen
oCurCell.Shading.BackgroundPatternColor = lFarbe1
' Zellenhintergrundfarbe der linken Nachbarzelle (sofern vorhanden) setzen
If oCurCell.ColumnIndex >= 1 Then
oCurTable.Cell(oCurRow.Index, oCurCell.ColumnIndex - 1).Shading.BackgroundPatternColor = lFarbe1
End If
ElseIf StrComp(strCurCellText, strString2) = 0 Then
' Zellenhintergrundfarbe setzen
oCurCell.Shading.BackgroundPatternColor = lFarbe2
' Zellenhintergrundfarbe der linken Nachbarzelle (sofern vorhanden) setzen
If oCurCell.ColumnIndex >= 1 Then
oCurTable.Cell(oCurRow.Index, oCurCell.ColumnIndex - 1).Shading.BackgroundPatternColor = lFarbe2
End If
End If
Next oCurCell
Next oCurRow
End With
Next oCurTable
NoDocumentOpen:
' Bildschirmaktualisierung einschalten
Application.ScreenUpdating = True
End Sub