HERBERS Excel-Forum - das Archiv

Thema: vba Unterschied Hintergrund- u. Zellfarbe InteriorColorindex

vba Unterschied Hintergrund- u. Zellfarbe InteriorColorindex
Bernhard.am.Rechner
Guten Tag den Mithelfenden im Forum,

gibt es einen Unterschied in den Begriffen Hintergrundfarbe und Zellfarbe?
Wo finde ich die wirklich gültigen Interior.Colorindizes?

vorweg Hintergrund meiner Frage (Das Beispiel ist reduziert auf 3 Zellen):
Zellen A1, A2, A3 haben die Hintergrundfarbe mit dem excel Standardgrün,
sind Zahlen oder auch nur eine Zahl in einer Zelle eingetragen, so wird mit bedingter Formatierung
das Maximum mit excel Standardorange eingefärbt (verkürzt dargestellt, da gibt es noch eine Hilfstabelle).

Mit vba habe ich ein kleines Makro geschrieben, das die Inhalte der Zellen löschen soll, nur nicht das Maximum.

If Range("A1").Interior.ColorIndex = 43 Then Range("A1").ClearContents
If Range("A2").Interior.ColorIndex = 43 Then Range("A2").ClearContents
If Range("A3").Interior.ColorIndex = 43 Then Range("A3).ClearContents

Ist das Makro fertig, soll der Cursor in die Zelle A4 springen und diese Zelle färben.

Range("A4").Select
Selection.Interior.ColorIndex = 43

Ergebnis: Das Makro tut nicht das, was ich gerne möchte. Das Makro löscht alle 3 Inhalte und färbt Zelle A4 schwarz.

A) "Glaube" kann falsch sein: Ich glaubte, dass Index 43 Standardgrün ist und Index 44 Standardorange ist.
Das ist offensichtlich falsch, auch wenn es dazu einige Farbtabellen mit Zuordnungen im web gibt;
ja, vielleicht ist auch mein Befehl falsch. Der Interior.Colorindex 43 in Zelle A4 liefert ein " schwarz".
Also könnte 43 in den Zellen A1:A3 auch falsch sein.

B) Nachsehen bei https://learn.microsoft.com/de-de/office/vba/api/excel.colorindex
Dort ist 43 ein viel dunkleres Grün und 44 keinesfalls orange. Nun nehme ich aus der MS-Farbindextabelle die Ziffer 17
als Testfarbe für A4 und erhalte ein dunkles Blau, aber nicht die von MS angezeigte Farbe.

Zwischenfazit für mich: Ich müsste mich mit den Indizes durchtesten, um die gewünschte Farbe Standardgrün oder Standardorange zu finden.

Es könnte ja auch sein, das das Standardorange aus der bedingten Formatierung sich nur über die Hintergrundfarbe drüber legt, die Zelle zwar orange
aussieht, aber mit der Hintergrundfarbe Standardgrün.
Dies habe ich getestet, in dem ich von der Zelle mit dem Maximum die Hintergrundfarbe Standardhellblau nutze, das Maximum legt orange drüber;

siehe da, das Makro löscht alle Inhalte, aber nicht die Zelle mit Hintergrundfarbe hellblau.

Endfazit:
Ich sehe 2 Probleme:
Welche Tabelle (Quelle?) zeigt die tatsächlichen Interior.Colorindizes mit den wirklichen Farben?
Wie muss ich die vba-Befehle ändern, damit die Zelle, die orange erscheint, inhaltlich nicht gelöscht wird, aber alle anderen Zellen?

An dieser Stelle: Herzlichen Dank für das Einlesen in meinen langen Text und vielleicht gibt es ja eine Lösung, die weiter hilft.
Viele Grüße Bernhard





AW: vba Unterschied Hintergrund- u. Zellfarbe InteriorColorindex
Sigi.21
Hallo Bernhard,

der ColorIndex ist längst veraltet! Er stammt aus einer Zeit als Excel nur 56 Farben kannte. Er sollte heute nicht mehr verwendet werden.
Heutige Versionen kennen über 16 Mio. Farben!

Wenn du aber versuchst zu einer beliebigen Farbe (Bsp. grüntöne) den Index zu ermitteln, bietet Microsoft den Index an, der dem alten Indexwert Nahe kommt. (s. Bsp in Mappe)

offizielle IndexWerte auch in Mappe

Gruß Sigi
https://www.herber.de/bbs/user/170848.xlsm
AW: vba Unterschied Hintergrund- u. Zellfarbe InteriorColorindex
Bernhard.am.Rechner
Hallo Sigi,
Deine Info zur Veraltung von ColorIndex berücksichtige ich als vba-Lernender gerne, danke. Die Info zum Index 43 in Deiner Tabelle führte mich zur Anfrage im Forum, ich bekomme damit keinen irgendwie gearteten Grünton, sondern einen Schwarzton (oder super dunkles Blau). Gebe ich "just for fun" als Index 10 ein, dann erhalte ich keinen Grünton, sondern ein Rot wie Index 9. Komisch, ist aber so. Positiv: Da ColorIndex veraltet ist, bitte nicht mehr auf die Suche nach Lösungen mit ColorIndex gehen.
Freundliche Grüße Bernhard

AW: vba Unterschied Hintergrund- u. Zellfarbe InteriorColorindex
Oberschlumpf
Hi Bernhard,

erstmal...Sigi hat recht, ColorIndex ist veraltet und bietet nicht die Möglichkeiten für Farbgestaltung, was heute mittlerweile alles möglich ist.

Ich hab mir mal die Mühe gemacht, dir eine kleine Anleitung mit Bildern zu erstellen.

Schau mal...
https://www.herber.de/bbs/user/170854.xlsx

Kannst du damit was anfangen?

Ciao
Thorsten
AW: vba Unterschied Hintergrund- u. Zellfarbe InteriorColorindex
Bernhard.am.Rechner
Hallo Thorsten,

die Programmierung mit ColorIndex verfolge ich nicht mehr; Deine Bilder-Anleitung ist großartig hilfreich.
a) Auf diesem Weg habe ich mit den StandardFarben die Zellen ausgefüllt. Neu gelernt: Mit Interior.Color = RGB(146, 208, 80) bekomme ich die von mir gewünschte Farbe genau hin. Damit ist ein Teil meiner Anfrage im Forum positiv beantwortet, danke.

b) Haben meine leeren Zellen den FarbHintergrund Interior.Color = RGB(146, 208, 80) und bekommen als Zellinhalt unterschiedlich große Zahlen, dann liefert die bedingte Formatierung mit einer Hilfstabelle ein Orange RGB(255,192,0) in der Zelle mit dem Maximalwert. Neu und spannend für mich: Frage ich jetzt in dieser Zelle die Farbe ab, dann wird mir als Hintergrund das Grün RGB(146,208,80) angegeben und nicht das für mich sichtbare Orange. Jetzt bin ich mir noch sicherer, dass meine Frage Fortbestand hat, wie ich mit vba nach dem "übergelagerten" orange frage, damit der Zellinhalt dieser Zelle nicht geleert wird.

Herzlichen Dank für Deinen Zeiteinsatz, der mich weiter gebracht hat.
Viele Grüße
Bernhard
AW: vba Unterschied Hintergrund- u. Zellfarbe InteriorColorindex
daniel
Hi
in VBA fragst du mit Cells().Interior.Color immer die normale Formatierung ab.
wenn du bedingte Formate hast und die aktuelle Farbe wissen willst, musst du ein "DisplayFormat" zwischenschieben: Cells(...).DisplayFormat.Interior.Color

Achtung, das funktioniert nur innerhalb von VBA-Makros.
Falls du auf die Idee kommen solltest, das in eine Function einzubauen die du in einer Formel in einer Excelzelle verwenden willst, dann wird das nicht funktionieren, das Microsoft das nicht zulässt (warum auch immer)

Gruß Daniel
AW: vba Unterschied Hintergrund- u. Zellfarbe InteriorColorindex
Oberschlumpf
ahh..cool..danke Daniel! :-)
AW: vba Unterschied Hintergrund- u. Zellfarbe InteriorColorindex
Bernhard.am.Rechner
Guten Abend Daniel,

genau Deine Antwort ist die Lösung! Super! Test klappt perfekt.
Ganz grundsätzlich: In einem Forum mit Millionen Fragen und Antworten möchte ich nicht wiederholt ein Problem beschreiben, das schon x-mal gelöst wurde. Dennoch: Das Hauptproblem ist "Die richtige Frage (für sich selbst) zu stellen, um vor einer Anfrage im Forum nach Lösungen zu suchen. In den mir vorliegenden Lernquellen habe ich den Begriff DisplayFormat nicht gefunden.
Vielen Dank für die Weitergabe Deines Wissens.

Herzliche Grüße
Bernhard
AW: vba Unterschied Hintergrund- u. Zellfarbe InteriorColorindex
Oberschlumpf
Hi Bernhard,

deine Irritation bzgl. "...Frage ich jetzt in dieser Zelle die Farbe ab, dann wird mir als Hintergrund das Grün RGB(146,208,80) angegeben und nicht das für mich sichtbare Orange..." ergibt sich, SO vermute ich, aus den zusätzlich verwendeten bedingten Formatierungen.

weiter ich vermute:
Das Abfragen einer Zellfarbe ergibt immer die wirklich zugewiesene Farbe, aber nicht eine Farbe, die wegen bedingter Formatierung gezeigt wird.

Wenn ich damit recht hab, kennst du nun zwar den Hintergrund - aber helfen kann ich trotzdem nicht, weil ich mich mit diesem "Zusammenspiel: echte Farbe, bedingt. Farbe" nicht genug auskenne.
...deswegen lass ich den Beitrag weiter offen...

Ciao
Thorsten
AW: vba Unterschied Hintergrund- u. Zellfarbe InteriorColorindex
Bernhard.am.Rechner
Hallo Thorsten,
Deine erste Antwort hat mir ja geholfen und ich bin nun auf einem modernen Weg. Dass Du auf mein weiteres Problem keine Hilfe geben kannst, finde ich nicht problematisch, Du zeigst mit Deinem Einsatz, dass Du helfen möchtest, dies wertschätze ich. Merci
Viele Grüße
Bernhard