Farben unter EXCEL verwalten

Hallo zusammen,

hab da mal ne Frage zu den Farben unter EXCEL (2002)

Zu folgendem Code-Ausschnitt gehört noch ein Sheet, in dem bestimmte Zellen (Zeilen 17, 18, je die ersten 8 Spalten) über 3 Slider mit Farben versehen werden sollen. Soweit klappt das auch, aber:

Nach einem Wechsel der Zelle (select), sofern es eine „Farb-Zelle“ ist muss ich die RGB Werte in das Sheet zurückschreiben. Dabei kommt aber immer Mist raus.

Das Schreiben über setNewColors funzt einwandfrei. Die Farben im „Satz“ (Extras Optionen) haben dann auch brav die Werte.

(Klar, die Slider gehen bis max 255!)

Option Explicit
Public activeColorCell As Range
Public doEventHandling As Boolean

Public Sub setNewColors()

 Dim i As Integer

 doEventHandling = False
 If (Not activeColorCell Is Nothing) Then
 If ((activeColorCell.Row = 17 Or activeColorCell.Row = 18) \_
 And (activeColorCell.Column 

Vielen Dank schonmal für jede Hilfe!

bniba

Diak.Pegasus

Grüezi Dirk

hab da mal ne Frage zu den Farben unter EXCEL (2002)

Zu folgendem Code-Ausschnitt gehört noch ein Sheet, in dem
bestimmte Zellen (Zeilen 17, 18, je die ersten 8 Spalten) über
3 Slider mit Farben versehen werden sollen. Soweit klappt das
auch, aber:

Nach einem Wechsel der Zelle (select), sofern es eine
„Farb-Zelle“ ist muss ich die RGB Werte in das Sheet
zurückschreiben. Dabei kommt aber immer Mist raus.

Excel kann bis xl2003 pro Mappe ‚nur‘ 56 unterschiedliche Farben verwalten und darstellen.

Das sind die ColorIndizies 1 - 56.

Jedem einzelnen dieser ColorIndizies kannst Du RGB-Werte zuweisen und diese werden auch so dargestellt.

Das direkte Zuweisen von RGB-Werten an eine Zelle (resp. deren Hintergrund oder Textfarbe) ist aber nicht möglich.

Ansonsten wäre ev. eine Demo-Mappe sinnvoll und hilfreich.

Mit freundlichen Grüssen
Thomas Ramel

  • MVP für Microsoft-Excel -
    [Win XP Pro SP-2 / xl2003 SP-3]

Grüezi Thomas,

Das direkte Zuweisen von RGB-Werten an eine Zelle (resp. deren
Hintergrund oder Textfarbe) ist aber nicht möglich.

sorry *nicht zustimm*

Sub Test()
Range(„A1“).Interior.Color = RGB(120, 130, 140)
End Sub

Ansonsten wäre ev. eine Demo-Mappe sinnvoll und hilfreich.

jepp, *zustimm* FAQ:2861 o.ä.

Gruß
Reinhard

Grüezi Reinhard auch :smile:

Grüezi Thomas,

Das direkte Zuweisen von RGB-Werten an eine Zelle (resp. deren
Hintergrund oder Textfarbe) ist aber nicht möglich.

sorry *nicht zustimm*

Sub Test()
Range(„A1“).Interior.Color = RGB(120, 130, 140)
End Sub

Jo, zuweisen lässt sich das schon, aber nicht darstellen.
Das klappt aber nur wenn *zufälligerweise* gerade eine der 56 definierten Farben auch genau diesen RGB-Wert hat.

Wenn dem nicht der Fall ist, wählt Excel die ähnlichste (wie genau diese Ähnlichkeit definiert wird, weiss ich nicht) der 56 definierten Farben und verwendet diese für die Darstellung.

So gesehen lässt sich natürlich jeder RGB-Wert einer Zelle zuweisen, da aber eh nur die 56 definierten Farben dargestellt werden ist dies IMO witzlos - dies zum Hintergrund meiner obigen Aussage.

Ansonsten wäre ev. eine Demo-Mappe sinnvoll und hilfreich.

jepp, *zustimm* FAQ:2861 o.ä.

Fein, dann warten wir doch mal :smile:

Mit freundlichen Grüssen
Thomas Ramel

  • MVP für Microsoft-Excel -
    [Win XP Pro SP-2 / xl2003 SP-3]

Grüezi Thomas,

schonmal vielen Dank für die Infos, auch an Reinhard!

Jedem einzelnen dieser ColorIndizies kannst Du RGB-Werte
zuweisen und diese werden auch so dargestellt.

Genau das tue ich, damit ich die Farbe dann verwenden kann. Daher auch die max 16 Zellen die ich benutze. Das sind die 16 „Indexfarben“ für Diagramme. Also RGB Wert bestimmen, in den Index schreiben und anwenden. Dann kann man auch die RGB Werte nehmen, da die ja dann „bekannt“ sind.

Das Problem ist auch eigentlich „nur“ aus einer Zelle die aktuellen RGB Werte auszulesen. Kann es sein, dass ich über den Index an die RGB Werte gehen muss? Wenn ich den Event onChange abfange und mir die Werte der Zelle anschaue (…interior.color) scheinen da nicht die akzuellen Werte zu liegen, oder die genannte Methode zur Umwandlung der long Werte in rgb ist falsch, glaub ich aber eher nicht.

Zu der Muster Tabelle: Da auf dieser die Slider das Wesentliche sind, die steuern mir die RGB Werte für die Zellen, nützt das normale „Tabelle in einen Thread packen“ imho nichts. (Oder gibts da auch was?)

Da ich jetzt kein EXCEl da habe werde ich Montag mal eine Lösung ohne Slider bauen. Drei Zellen mit den RGB Werten füllen, die wie schon geschrieben in den Farbindex schreiben und auf eine Zelle anwenden.

biba

Dirk.Pegasus

Grüezi Dirk

Jedem einzelnen dieser ColorIndizies kannst Du RGB-Werte
zuweisen und diese werden auch so dargestellt.

Genau das tue ich, damit ich die Farbe dann verwenden kann.
Daher auch die max 16 Zellen die ich benutze. Das sind die 16
„Indexfarben“ für Diagramme. Also RGB Wert bestimmen, in den
Index schreiben und anwenden. Dann kann man auch die RGB Werte
nehmen, da die ja dann „bekannt“ sind.

OK, Danke für diese wichtigen Hintergrund-Infos. Damit lässt sich viel besser erkennen, was Du genau tun möchtest.

Das Problem ist auch eigentlich „nur“ aus einer Zelle die
aktuellen RGB Werte auszulesen. Kann es sein, dass ich über
den Index an die RGB Werte gehen muss? Wenn ich den Event
onChange abfange und mir die Werte der Zelle anschaue
(…interior.color) scheinen da nicht die akzuellen Werte zu
liegen, oder die genannte Methode zur Umwandlung der long
Werte in rgb ist falsch, glaub ich aber eher nicht.

Nein, ich denke auch, dass das Auslesen soweit korrekt geht.
Mir scheint eher der Ereignis-Code fürs Selection_Change() etwas ‚konfus‘ zu sein.

Mit den folgenden Zeilen (für mich einfacher lesbar) bekomme ich IMO die richtigen Farben in die Zellen ausgeschrieben.

Wenn Du die Slider dann noch gleich mit diesen Zellen verknüpfst (über deren Eigenschaft 'Linkedcell) stehen diese jeweils auf dem richtigen Wert für die momentan aktive Zelle der Farben.

Zu der Muster Tabelle: Da auf dieser die Slider das
Wesentliche sind, die steuern mir die RGB Werte für die
Zellen, nützt das normale „Tabelle in einen Thread packen“
imho nichts. (Oder gibts da auch was?)

Du solltest die Mappe abspecken, auf einen WebSpace hochladen und den Link hier nennen.
Es ist jeweils nicht ganz einfach (und daher zeitintensiv) aus einer Beschreibung eine Mappe nachzubauen und ggf auch gleich die richtigen Bezeichnungen und Steuerelemente einzubauen.
Wenn eine Demo-Mappe zur Verfügung steht (oder eine klar strukturierte Beschreibung welche Elemente in der Mappe sind, wie sie heissen und wie sie womit verknüft sind, sowie der komplette Code) macht dies die Suche nach der Ursache eines Problems doch einiges einfacher.

Hier also nun der Ereignis-Code, der bei mir soweit korrekt tut:

Private Sub Worksheet\_SelectionChange(ByVal Target As Range)
 Set Target = Intersect(Target, Range("A17:H18"))
 If Not Target Is Nothing Then
 If Target.Count \> 1 Then Set Target = Target(1)
 Application.EnableEvents = False
 Dim colHex As String
 Range("A2").Value = GetRGB(Target.Interior.Color, "R")
 Range("A6").Value = GetRGB(Target.Interior.Color, "G")
 Range("A10").Value = GetRGB(Target.Interior.Color, "B")
 End If
 Application.EnableEvents = True
End Sub

Wie genau die Slider mit den Farben zusammenhängen ist mir (noch) nicht ganz klar, aber Du sagtest ja, dass dies soweit klappt…

Mit freundlichen Grüssen
Thomas Ramel

  • MVP für Microsoft-Excel -
    [Win XP Pro SP-2 / xl2003 SP-3]

Hallo Thomas,

dein Code hat auch nicht geholfen. Ich denke mir nun folgendes:

Wenn ich die Farbe verändere schreibe ich auch in die Farbtabelle den neuen Wert, da ja sonst die Farbe nicht existiert:

activeColorCell.Interior.Color = ActiveWorkbook.Colors(i)

Ich glaube nun, dass diese Änderung nicht „sofort bekannt“ ist. Ich habe nun folgendes noch geändert:

Range("A2").Value = GetRGB(ActiveWorkbook.Colors(Target.Interior.ColorIndex), "R")
 Range("A6").Value = GetRGB(ActiveWorkbook.Colors(Target.Interior.ColorIndex), "G")
 Range("A10").Value = GetRGB(ActiveWorkbook.Colors(Target.Interior.ColorIndex), "B")

Ich greife also nicht direkt auf die Farbe der Zelle zu (die sozusagen noch nicht bekannt ist), sondern nur auf den Index. Mit dem hole ich mir dann dir Farbe aus der Tabelle und bestimme RGB.

So geht es!

Falls dich das ganze aus „sportlichen Gründen“ noch interessiert kann ich dir gerne den Code „vorher/nachher“ schicken, samt Tabelle versteht sich.

mfg

Dirk.Pegasus

Grüezi Dirk

dein Code hat auch nicht geholfen.

Dann war der Zusammenhang zur unklar - hier hat der Code korrekt die richtigen RGB-Werte in die drei genannten Zellen geschrieben.
Wie diese nun weiter verarbeitet werden (sollen) ist/war (mir) aufgrund der Beschriebung nicht so ganz klar.
Daher der Wunsch nach der Demo-Mappe… :wink:

Wenn ich die Farbe verändere schreibe ich auch in die
Farbtabelle den neuen Wert, da ja sonst die Farbe nicht
existiert:

activeColorCell.Interior.Color =
ActiveWorkbook.Colors(i)

Hmmm, Du sollst doch eine Zelle nicht per .Color einfärben sondern per ColorIndex…?

Ich greife also nicht direkt auf die Farbe der Zelle zu (die
sozusagen noch nicht bekannt ist), sondern nur auf den Index.
Mit dem hole ich mir dann dir Farbe aus der Tabelle und
bestimme RGB.

So geht es!

Das ist IMO noch einmal zu oft ‚von hinten druch die Brust ins auge‘…:wink:

Falls dich das ganze aus „sportlichen Gründen“ noch
interessiert kann ich dir gerne den Code „vorher/nachher“
schicken, samt Tabelle versteht sich.

Ja, sehr gerne - ich bin sicher, das das noch etwas direkter zu lösen ist.


Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Grüezi Thomas,

dein Code hat auch nicht geholfen.

Dann war der Zusammenhang zur unklar - hier hat der Code
korrekt die richtigen RGB-Werte in die drei genannten Zellen
geschrieben.
Wie diese nun weiter verarbeitet werden (sollen) ist/war (mir)
aufgrund der Beschriebung nicht so ganz klar.

das beruhigt mich sehr, ich habe bis jetzt nicht verstanden warum nach Verlassen von farbigen Zellen, in den man grad mit Schiebereglern die Einzelfarbwerte geändert hat, alles wieder auf Standard gesetzt werden soll.

Das Rücksetzen könnte ja einfach so geschen daß man aus einer Mappe die nicht zufällig Standardfarbwerte.xls heißt die Farbpalette importiert.

Daher der Wunsch nach der Demo-Mappe… :wink:

Von daher wäre eine Beispielmappe schon schick, natürlich nicht mit stiller Post sondern mit FAQ:2861 o.ä.
Leider ignorierte Dirk meinen entsprechenden Hinweis :frowning:

Gruß
Reinhard

Hallo euch beiden,

@Reinhard: Ich habe deinen Hinweis nicht ignoriert, aber in das Forum stellen mit den Reglern geht imho nicht. Daher nun als Link:

http://www.hostarea.de/server-12/Dezember-147bdba1ac…

Der Zusammenhang zwischen Index und Color ist mir schon klar. Deswegen setze ich die RGB Werte der Zelle und des Index. damit geht es. Aber das Lesen halt nicht. Über den Umweg des Index schon.

biba

Dirk.Labonte