Rubrik: Word | VB-Versionen: VBA | 19.08.15 |
Tabellen zeilenweise alternierend färben; VBA Word (2007) Der Tipp als VBA-Projekt zeigt das Färben von Tabellenzeilen in alternierenden Farben | ||
Autor: Dietrich Herrmann | Bewertung: | Views: 7.391 |
ohne Homepage | System: WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt |
Dieser Tipp ist eher für VBA-Beginner gedacht, um ein paar Programmierprinzipien zu veranschaulichen. Denn es gibt in Word 2007 auch die integrierte Funktion Tabellen-Layout, wo man verschiedene voreingestellte Farblayouts nutzen kann. Allerdings enthält unser Tipp noch eine zusätzliche Funktion:
- Die Anwendung eines ColorDialogs
- Das Einfärben von Zeilen als Zeilengruppen in Abhängigkeit von Werten in einer definierten Spalte. Die Tabelle muss nach den Werten in dieser Spalte sortiert sein.
- Weiterhin werden im Tipp die Verwendung von Variablen in einem Word-Dokument demonstriert als auch die Verwendung von animiertem GIF in einem WebbrowserControl (als Waiting-Graphic).
Hier die Funktion für das Einfärben von Zeilen:
' Erzeugen gefärbter Zeilengruppen (alternierend) ' entweder in Anzahl von Zeilen oder auf Grund von Werten in spezieller Spalte ' in Word-Tabellen ' tb: Nummer der Word-Tabelle ' art: Art der Einfärbung ' farbe1: erste Farbe ' farbe2: zweite Farbe ' tit: mit|ohne Einbeziehung von Titelzeilen ' titA: Anzahl der Titelzeilen ' sp: Spaltennummer für Vergleich bei Färbung nach Werten ' vglAnz: alle Vergleichswerte in sp anzeigen oder nicht Public Sub TableColoringAlternateRows(tb As Integer, art As Integer, _ farbe1 As Long, farbe2 As Long, tit As Boolean, titA As Integer, _ sp As Integer, vglAnz As Boolean) Dim specStr As String Dim lastValue As String, aktValue As String Dim cFarbe As Long If tit Then a = titA Else a = 0 lastValue = "" rowAnz = ActiveDocument.Tables(tb).Rows.Count For i = 1 + a To rowAnz With ActiveDocument.Tables(tb).Rows(i).Shading Select Case art Case 1 ' einzeilig If i Mod 2 = titA - 1 Then .BackgroundPatternColor = farbe1 Else .BackgroundPatternColor = farbe2 End If Case 2 ' zweizeilig If i Mod 4 = titA - 1 Or i Mod 4 = titA Then .BackgroundPatternColor = farbe2 Else .BackgroundPatternColor = farbe1 End If Case 3 ' dreizeilig If i Mod 6 = titA + 1 Or i Mod 6 = titA + 2 Or i Mod 6 = titA + 3 Then .BackgroundPatternColor = farbe1 Else .BackgroundPatternColor = farbe2 End If Case 4 ' vierzeilig If i Mod 8 = titA + 1 Or i Mod 8 = titA + 2 Or i Mod 8 = titA + 3 Or i Mod 8 = titA + 4 Then .BackgroundPatternColor = farbe1 Else .BackgroundPatternColor = farbe2 End If Case 5 ' nach Werten specStr = ActiveDocument.Tables(tb).Rows(i).Cells(sp).Range.text specStr = Left(specStr, Len(specStr) - 2) ' einkürzen nötig wegen Tabellenzellen-Notation aktValue = specStr If lastValue = "" Or lastValue <> aktValue Then lastValue = aktValue If cFarbe = farbe1 Then cFarbe = farbe2 Else cFarbe = farbe1 ' Farbwechsel ' If vglAnz = False Then ' ActiveDocument.Tables(tb).Rows(i).Cells(sp).Range.text = "" ' End If End If .BackgroundPatternColor = cFarbe End Select End With DoEvents Next selection.StartOf unit:=wdTable End Sub