Hintergrundfarbe kopieren in Excel
Hallo Excelianer,
hoffe jemand kann mir helfen. Ich habe in einer Zelle eine Hintergrundfarbe eingestellt die NICHT den Standardfarben von Excel entspricht.
Komme also über VBA mit Interior.Colorindex nicht an die Farbe.
Ich möchte diese Hintergrundfarbe nun auf eine andere Zelle übertragen und zwar NUR die Farbe (keine Zahlenformate, keine Rahmen, keine Schriftformate).
Hab ich da irgend eine Möglichkeit?
4 Antworten
Ich denke, dass geht nur händisch, also:
Zelle mit der zu kopierenden Farbe auswählen.
Auf Füllfarbe / Weitere Farben/ Benutzerdefiniert gehen,
und DA die RBG-Werte abschreiben (oder auswendig merken (:o)).
Dann die andere Zelle auswählen und dort die RGB-Werte eingeben.
Aber wahrscheinlich ist es da schneller, alle Formate mit Inhalte einfügen... zu kopieren und den Rest wieder zurückzustellen.
Oder willst Du das über VBA machen?
Dann z.B. so:
ActiveCell.Interior.Color = Range("A1").Interior.Color
Du kannst auch den Color-Wert in eine Variable auslesen und dann später verwenden:
lngTolleFarbe = ActiveCell.Interior.Color
Oder habe ich Dich irgendwie falsch verstanden?
Perfekte Antwort. Wieder was dazugelernt. :-) 1000 Dank.
Genau das ist das Problem. Ich habe die Farben nicht aus der Standadpalette und bekomme wenn ich die Zelle über Interior.Colorindex auslese bei 7 möglichen Zellen 5 mal die 2 und 2 mal die 19. Also gehe ich davon aus das die Farbe keinen direkten Colorindex hat. Der geht ja soweit ich weiss nur bis 256. Meine Farben sind aber aus der 32bit-Palette.
dann mach ichs über kopieren und Zahlenformat und Schriftfarbe einzeln zurückstellen. ist zwar bei 20 Spalten ein bissi Aufwand aber OK. Sollte dir noch was Schlaues einfallen wäre ich dankbar.
Meine Antwort zu DIESEM Kommentar von Dir (also der mit: "Genau das ist...")
Warum nicht mit:
ActiveCell.Interior.Color = Range("A1").Interior.Color
P.S.: Ist aber auch wirklich etwas durcheinander im Moment.
[ES, nicht ICH!]
Wenn du eine Farbe auswählst die keine Standartfarbe ist dann macht man das meist auf einer Farbpalette wo man den Regler stufenlos verstellen kann. Geh mal auf die Zelle und schau dir die Farbe an, welche du haben möchtest. Meinst sind unter der Palette zahlen angegeben, welche die Anteile der einzelnen Grundfarben angeben. Diese Zahlen musst du dann nur in deine neue Zelle übernehmen.
Sorry vergessen zu erwähnen das ich die Zelle mit VBA färben will. Leider weiss ich in VBA keine Möglichkeit den RGB-Anteil zu vergeben. Weisst du eine?
Wähle die Zelle mit der Farbe aus. Klicke oben auf "Format übertragen" (Registerblatt Start weit links) und klicke dann in deine Zielzelle, in der du die Farbe haben willst.
dann übertragt er ja alle Formate was ich ja gerade verhindern will.
Aber eben auch die Farbe damit automatisch. Die restlichen Formate wie Schriftart und Rahmen etc. kannst du ja dann nachher wieder von Hand einstellen. Ich würd mir da jetzt nicht den Aufwand mit VBA machen, wenn du eh nur die Farbe auf eine Zelle kopieren willst.
Wie gesagt leider vergessen das es über VBA laufen soll da eine größere Liste abgearbeitet werden soll mit verschiedenen Hintergrundfarben abgearbeitet werden soll. Danke trotzdem.
Ich musste selbst mal die RGB-Werte einiger Farben auslesen. Dazu empfehle ich dir diese Funktion:
Public Function GetRGB(RGB As Long, ByRef R As Integer, ByRef G As Integer, ByRef B As Integer)
R = RGB And 255
G = RGB \ 256 And 255
B = RGB \ 256 ^ 2 And 255
End Function
Sub Test()
Dim R As Integer
Dim G As Integer
Dim B As Integer
GetRGB Cells(1, 1).Interior.Color, R, G, B
MsgBox (R & ";" & G & ";" & B)
End Sub
Erklärung:
- Die eingentliche Lösung ist die Funktion - das Makro danach ist nur zu Testzwecken und zur Veranschaulichung da...
- RGB -> Hiermit übergibst du der Funktion die RGB-Werte aus einer Zelle oder einem Bereich
- R, G, B -> das sind dann die zurückgelieferten Werte für die Farben
- Nachdem die Funktion durchlaufen ist, kannst du die erhaltenen RGB-Werte weiterverwenden.
Das Setzen der Farben funktioniert so, wie Oubyi beschrieben hat - dies Bedarf daher keiner weiteren Erklärung.
Ich hoffe, ich konnte dir helfen :D
Mit freundlichen Grüssen
Higlav
Ich hatte mir zwar gedacht, dass man aus der Zahl, die .Color zurückgibt (z.B.: 8596114) irgendwie die RGB-Werte bekommt, aber dass man dazu SO tricksen muss... .
Ich habe jetzt in der Hilfe zu AND (das ich nur als einfachen Operator kannte) gelesen:
"Der Operator And führt darüber hinaus einen bitweisen Vergleich gleich positionierter Bits in zwei numerischen Ausdrücken durch und legt das zugehörige Bit in Ergebnis gemäß der folgenden Tabelle fest: ..."
Ich denke DA liegt der "Hund begraben".
Aber richtig genau verstehe ich das nicht und muss ich ja auch nicht, Hauptsache, ich weiß jetzt wie es geht.
Danke für die interessante INFO!
@Oubyi: danke für den Hinweis zu AND ! (habs auch noch nicht verstanden, aber hilft mir beim Näherkommen!)
ist zwar eine mir völlig neue Art, Variable zu definieren (das And heißt wohl: einschließlich?), aber es funktioniert einwandfrei. DH!
Hab lediglich Cells(1, 1) durch ActiveCell ersetzt zum Testen. ****
Wird meine alten grauen Zellen wohl noch ein bisschen beschäftigen, bis ich das gefressen hab!...
Ich hab dazu immer einen Elefanten an Formalismus gebraucht, zB in
www.gutefrage.net/frage/wieso-liefert-in-excel-vba-die-funktion-interiorcolorindex-verschiedene-werte-zurueck
FESTLEGEN kannst Du die Zellfarbe auch mit RBG-Werten, und zwar so:
ActiveCell.Interior.Color = RGB(146, 42, 131)
Nur habe ich noch nicht herausgefunden, wie man die RGB-Werte AUSlesen kann (außer halt wie oben beschrieben händisch).
P.S.: Hat sich schon wieder überschnitten, diesmal mit Deinem Kommentar zu meiner Antwort.