![](/file/23459/chip_04_2004.iso/images/spacing.gif) |
Listenzeilen wertabhängig einfärben
Ich verwende die in der Ausgabe 12/97 vorgestellte Funktion zur Berechnung der beweglichen Feiertage in meinem Excel-Kalender. Dort stehen neben dem Datum die Tagesbezeichnung und im Falle eines Feiertages in einer dritten Spalte sein Name. Zur besseren Übersicht würde ich gerne die Wochenenden und die Zeilen mit den Feiertagen durch unterschiedliche Farben hervorheben. Geht das auch mit Hilfe eines Makros?
Manuell stellt das Ändern von Farben kein Problem dar: Sie durchsuchen die Tage. Wenn Sie einen Feiertag finden, markieren Sie die Zeile und färben sie rot. Falls es sich um einen Samstag handelt, färben Sie sie beispielsweise grau. Sobald Sie die Färbung jedoch automatisch durchführen wollen, muß auch der Vergleich mit der Tagesbezeichnung automatisch erfolgen. Sie benötigen also ein Makro, das alle Zeilen (Tage) durchläuft und in Abhängigkeit von der Tagesbezeichnung entsprechend färbt. Dazu kommt der Test auf einen Feiertag. Sie könnten einmal das Makro für die Wochenenden starten und anschließend ein anderes Makro, das nach Feiertagen sucht. Es läßt sich aber auch integrieren. Das Makro im Kasten auf dieser Seite erledigt die von Ihnen gewünschte Funktion. Die mit Hochkommas eingeleiteten Befehle brauchen Sie übrigens nicht abzutippen. Das Makro sieht kompliziert aus, ist es aber nicht. Es besteht aus vier Bausteinen: Der erste initialisiert die Variablen. Die erste Zeile ermittelt die zu überprüfende Spalte aus der Cursor-Position. Somit funktioniert das Makro unabhängig von der Gestalt des Kalenders. Sie müssen es nur auf die Spalte mit den Daten setzen. Falls Sie diese Flexibilität nicht benötigen, können Sie SelCol durch eine Konstante ersetzen. Die nächste Anweisung setzt den Zeilenzähler i auf 1. Falls bei Ihnen der 1. Januar nicht in der zweiten Zeile, sondern in der fünften liegt, initialisieren Sie i mit dem Wert 4. Zuletzt setzen Sie die Abbruchbedingung Break- OFF auf den richtigen Ausgangswert. Der zweite Baustein besteht aus einer WHILE-Schleife. Das Makro beginnt mit der Überprüfung am 1.1. und muß so lange eine weitere Zeile überprüfen, bis es den 31.12. erreicht. Der dritte Teil ist die Prüfbedingung. Sie hat aufgrund der Stärke des Feiertags, der auch an einem Wochenende liegen kann, folgende Struktur:
WENN Feiertag DANN Rot¶ SONST WENN Samstag DANN Hellgrau¶ SONST WENN Sonntag DANN Dunkelgrau¶ Zunächst prüft das Makro die in diesem Fall rechts (SelCol +1) von der Datumsspalte stehenden Einträge. Falls es einen Eintrag findet, handelt es sich um einen Feiertag, und es färbt die Zeile mit Hilfe des vierten Bausteins rot. Wenn das nicht der Fall ist, überprüft das Makro zunächst auf einen Samstag, dann auf einen Sonntag. Tritt keiner dieser Fälle ein, passiert nichts, und die nächste Zeile avanciert zum Prüfobjekt. Die Informationen über die Tage holt das Makro aus der linken Nachbarspalte der Spalte mit den Daten (SelCol - 1). Durch Variation der Konstanten 1 und des Operators lassen sich auch beliebige andere Spalten der gleichen Zeile ansprechen. Falls eine Zeile zu färben ist, tritt der vierte Baustein in Aktion. Das ROWS-Auflistungsobjekt erlaubt durch An- gabe eines Index als Parameter den Zugriff auf eine Zeile des aktiven Arbeitsblattes. Der Zähler i identifiziert die gerade bearbeitete Zeile. Um die farbliche Anpassung vorzunehmen, verändern Sie über das ROWS-Auflistungsobjekt die entsprechenden Eigenschaften der aktiven Zeile. Um gleich mehrere Eigenschaften zu verändern, benutzen Sie das WITH—Konstrukt. Das Makro finden Sie übrigens als TXT-Datei auf der aktuellen WIN-Monats-CD sowie in den WIN-Online-Foren.
Listing „Feiertage einfärben“ Sub LineMarker ()¶ æWerte initialisieren (Baustein 1)¶ SelCol = ActiveCell.Column¶ i = 1¶ BreakOff = False¶ æHier beginnt die Schleife (Baustein 2)¶ While Not BreakOff¶ i = i + 1¶ ActiveSheet.Cells (i, SelCol).Activate¶ æWenn noch nicht Ende des Jahres, dann ...¶ If Not ActiveCell.Value = “31.12.98“ Then¶ æPrüfroutine [IF..THEN..ELSEIF..ELSEIF..ENDIF] (Baustein 3)¶ If ActiveSheet.Cells (i,SelCol+1).Value<>“ “ Then¶ æFärben (Baustein 4)¶ Rows (i).Select ¶ With Selection.Interior¶ .ColorIndex = 3¶ .Pattern = xlSolid¶ End With¶ ElseIf ActiveSheet.Cells (i,SelCol-1).Value=“Samstag“ Then¶ Rows (i).Select¶ With Selection.Interior¶ .ColorIndex = 15¶ .Pattern = xlSolid¶ End With¶ ElseIf ActiveSheet.Cells (i,SelCol-1).Value=“Sonntag“ Then¶ Rows (i).Select With Selection.Interior¶ .ColorIndex = 48¶ .Pattern = xlSolid¶ End With¶ End If¶ Else¶ æWenn doch Ende des Jahres, dann dieser Teil (Baustein 4)¶ BreakOff = True¶ End If¶ Wend¶ End Sub¶
|
![](/file/23459/chip_04_2004.iso/images/spacing.gif) |