Anzeige
Archiv - Navigation
1620to1624
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Rückgabewert Font.ColorIndex für gesamte Zeile?

Rückgabewert Font.ColorIndex für gesamte Zeile?
28.04.2018 08:34:53
Michael
Lieber Herr Herber,
ich nutze die Gelegenheit, mich hiermit bei Ihnen herzlich für Ihr super Forum zu bedanken. Ich habe hier schon viele Tipps und Hilfestellungen gefunden, die mir viel Zeit und Mühe gespart haben. Echt klasse, dass Sie Ihr Wissen so bereitwillig zur Verfügung stellen. Vielen Dank!
Ich habe eine etwas "esoterische" Frage, auf die ich keine Antwort finden kann. Hab schon einiges rumgegoogelt, aber keine Chance.
Aus Performancegründen teste ich i.Allg. zuerst den Zustand einer Zelle / Zeile, bevor ich sie ändere. Es bringt enorm viel, wenn man einen Wert nicht erneut zuweist, der schon in der Zelle steht, oder eine Formatierung nicht einstellt, die ohnehin schon drin ist. Das gilt praktisch immer und ganz besonders dann, wenn mit jeder Planänderung per Event weitere Bearbeitungsroutinen angestoßen werden (man kann das zwar mit EnableEvents selektiv ein- und ausschalten, aber das ist a) gefährlich (wehe, man vergisst, z.B. durch einen Fehler-Exit, das wieder zurückzustellen...) und b) ziemlich viel Aufwand für z.B. nur einige wenige Änderungen).
Die spezifische Frage nun ist wie folgt: Ich will eine Zeile einfärben mit einer Farbe aus dem Index, aber nur dann (s.o.), wenn die Zeile noch nicht bereits schon die selbe Farbe hat. Also mit [ Rows(zeile).Font.ColorIndex = Farbe ].
Das Problem sind dabei Zeilen, welche gemischte Farben haben. Eine Zelle rot, eine andere blau, wieder andere schwarz, zum Beispiel. Der Rückgabewert der Abfrage Rows(zeile).Font.ColorIndex interessiert mich. Was ich sozusagen bräuchte, wäre "gemischt", damit ich weiß, nicht alle Zellen in der Zeile haben die gleiche Farbe. Wenn ich jedoch den Wert vorher abfrage [ If Rows(zeile).Font.ColorIndex Farbe Then Rows(zeile).Font.ColorIndex = Farbe ] geht das schief bei Zeilen mit gemischten Farben, und zwar so ziemlich unvorhersagbar (manchmal geht's doch, manchmal nicht, aber warum mal so, mal so, weiß ich nicht). (Anmerkung: Auch wenn die Zeile gemischte Farben hätte, will ich sie trotzdem als Ganzes in eine andere Farbe stellen.)
Ich behelfe mir mit einer selbstgestrickten Funktion:
Function rowcolor(r As Integer) As Integer
Dim i As Integer
rowcolor = Cells(r, 1).Font.ColorIndex
For i = 2 To ActiveSheet.UsedRange.Columns.Count
If rowcolor  Cells(r, i).Font.ColorIndex Then
rowcolor = -1
Exit Function
End If
Next
End Function

Diese Funktion gibt entweder die Farbe der ersten Zelle zurück, oder -1 wenn nicht alle genutzten Zellen in der Zeile dieselbe Farbe haben wie die erste. Da es keinen ColorIndex mit -1 gibt (oder etwa doch?), löst das mein Problem zuverlässig.
Tja, und das funktioniert zwar und auch hinreichend performant (für nicht allzuviele Aufrufe), elegant ist es aber nicht. Und bei sehr vielen zu bearbeitenden Zeilen wohl auch nicht mehr allzu schnell - könnte man sich die Prüfung vielleicht sogar sparen...
Wissen Sie vielleicht, wie Excel den Rückgabewert für Row(zeile).Font.ColorIndex behandelt, wenn nicht alle Zellen in einer Zeile dieselbe Farbe aufweisen?
Viele Grüße
Michael Böhm

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Rückgabewert Font.ColorIndex für gesamte Zeile?
28.04.2018 08:41:03
Michael
Schwerer Fauxpas - ich vergaß, mich bei all den anderen Mit-Foristen zu bedanken, welche ja auch hier fleißig beitragen. Es sei bitte hiermit nachgeholt - vielen Dank an alle anderen, die hier Hilfestellung geben! Michael
AW: Rückgabewert Font.ColorIndex für gesamte Zeile?
28.04.2018 09:44:40
Pascal
Hallo Michael,
du kannst dir die Schleife sparen, mit folgendem Code prüfst du ob alle Zellen die gleiche Farbe haben. Trifft dies nicht zu wird "Null" zurückgegeben.

With ActiveSheet
rowcolor = Cells(r, 1).Font.ColorIndex
If IsNull(.Range(.Cells(r, 2), .Cells(r, .UsedRange.Columns.Count)).Font.ColorIndex) Then
rowcolor = -1
Exit Function
End If
End With
Gruß Pascal
Anzeige
AW: Rückgabewert Font.ColorIndex für gesamte Zeile?
28.04.2018 10:10:36
Michael
Klasse Idee und funktioniert astrein - vielen herzlichen Dank!

303 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige