Excel und die farben

hallo,

kann man über vba farben auf grundlage von rgb- oder cmyk-werte erzeugen?

ein traum wäre folgendes:

spalte a: r-wert
spalte b: g-wert
spalte c: b-wert
und die zelle in spalte d ist dann entsprechend dieser farbwerte eingefärbt.

ich weiß, dass excel auf 56 farben je arbeitsblatt beschränkt ist - aber sind diese denn über vba wenigstens frei definierbar?!?

danke für eure hilfe!

johneff

kann man über vba farben auf grundlage von rgb- oder
cmyk-werte erzeugen?
spalte a: r-wert
spalte b: g-wert
spalte c: b-wert
und die zelle in spalte d ist dann entsprechend dieser
farbwerte eingefärbt.
ich weiß, dass excel auf 56 farben je arbeitsblatt beschränkt
ist - aber sind diese denn über vba wenigstens frei
definierbar?!?

Hi johneff,
ja, kannste frei wählen. Schau mal hier:
http://groups.google.de/groups?num=50&hl=de&lr=&neww…
stehen genügend Informationen wie das geht.
Was ist denn „cmyk“ ?
Gruß
Reinhard

Hallo Reinhard,
Das Ursprung CMY-Farb-Modell (Cyan,Magenta,Yellow) bringt in der Praxis (Druck) kein reines Schwarz, sondern so etwas wie ein dreckiges Graubraun.
Deshalb muss auf einem Printer (oder einer Druckmaschine) noch Schwarz als 4. Farbe mitgedruckt werden.
Das nennt man dann das CMYK-Farb-Modell.
Gruß Hermann

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Was ist denn „cmyk“ ?

Hallo Reinhard,
Das Ursprung CMY-Farb-Modell (Cyan,Magenta,Yellow) bringt in
der Praxis (Druck) kein reines Schwarz, sondern so etwas wie
ein dreckiges Graubraun.
Deshalb muss auf einem Printer (oder einer Druckmaschine) noch
Schwarz als 4. Farbe mitgedruckt werden.
Das nennt man dann das CMYK-Farb-Modell.
Gruß Hermann

Hi Hermann,
danke dir, cmyk hatte ich noch nie gehört. Klar, hätte auch für mich googeln können, aber so kriegen deine Info noch andere Interessierte mit.
Gruß
Reinhard

hallo,

kann man über vba farben auf grundlage von rgb- oder
cmyk-werte erzeugen?

Das geht recht einfach. Den folgenden Makro habe ich mir mal gestrickt, da mir die von Excel vorgegegebenen Farben nicht passten. Sie bleiben für immer in der Arbeitsmappe, in der der Makro aktiviert wird, gespeichert/erhalten. Der Makro selbst ist bei mir in der Personl.xls.
Natürlich kannst du dir die Farben auch anders vorgeben, z.B. über ein VBA-Array oder in einem Tabellenblatt

' FarbeÄndern Makro
' Erstellung: 14.03.97

Sub FarbeÄndern()

 Const f\_min% = 17
 Const f\_max% = 40
 Const basis% = 200 'Startfarbe, darunter ist's zu dunkel
 Const inkr% = 5

 Dim i%, r%, g%, b%
 Dim aktualisieren As Boolean

 aktualisieren = Application.ScreenUpdating
 Application.ScreenUpdating = False

 r = basis
 g = basis
 b = basis
 For i = f\_min To f\_max
 r = r + inkr
 g = g + inkr
 b = b + inkr
 ActiveWorkbook.Colors(i) = RGB(r, g, b)
 Next i

 Application.ScreenUpdating = aktualisieren

End Sub

Gruß, Stucki

erstmal vielen dank an alle!

hier habe ich tatsächlich entsprechenden vba-code gefunden:
http://groups.google.de/groups?hl=de&lr=&newwindow=1…

diesen habe ich bezüglich den zellen transponiert, d.h., die rgb-werte stehen in den zellen a1:c1, d1 wird eingefärbt.

die frage ist nun: wie baue ich eine schleife, damit ich in 56 zeilen unterschiedliche rgb-werte eingeben kann und entsprechend eingefärbte zellen in spalte d habe?

kann man da eine benutzerdefinierte funktion basteln?!?

bitte entschuldigt die vielleicht etwas dämlichen fragen, habe aber leider kein plan von vba.

johneff

die frage ist nun: wie baue ich eine schleife, damit ich in 56
zeilen unterschiedliche rgb-werte eingeben kann und
entsprechend eingefärbte zellen in spalte d habe?

Hi johneff,
Rechtsklick unten auf den Tabellenblattnamen, Code anzeigen auswählen, der Editor geht auf, nachstehenden Code reinkopieren, Editor schliessen.
Dann mit Extras–>Makro–>Makros das Makro "Tabelle1!RGBAnzeige ausführen lassen. Dies musst du nur einmal machen.
In A:C hast du dann die 3 Werte für RGB, in D die Farbnummer(1-56) und in E siehst du wie die Farbe aussieht.
Die Werte die du anfangs siehst sind die Werte der Standardfarbeinstellung.
Jetzt kannst du nach Lust und Laune die Werte ändern, Änderungen siehst du sofort in Spalte E.
Gruß
Reinhard

Private Sub Worksheet\_Change(ByVal Target As Range)
If Intersect(Target, Range("A2:C57")) Is Nothing Then Exit Sub
If Target.Cells.Count 1 Then Exit Sub
z = Target.Row
ThisWorkbook.Colors(z - 1) = RGB(Cells(z, 1), Cells(z, 2), Cells(z, 3))
Target.Select
End Sub

Sub RGBAnzeige()
Dim z As Byte
Application.EnableEvents = False
With Worksheets("Tabelle1")
 .Range("A1:E1") = Split("Rot Grün Blau Farbnummer Farbe")
 For z = 1 To 56
 .Cells(z + 1, 4).Value = z
 .Cells(z + 1, 5).Interior.ColorIndex = z
 Wert = Worksheets("Tabelle1").Cells(z + 1, 5).Interior.Color
 On Error Resume Next
 .Cells(z + 1, 1) = Wert Mod 256
 Wert = (Wert - Cells(z + 1, 1)) / 256
 .Cells(z + 1, 2) = Wert Mod 256
 Wert = (Wert - Cells(z + 1, 2)) / 256
 .Cells(z + 1, 3) = Wert Mod 256
 Next z
End With
Application.EnableEvents = True
End Sub

Vielen Dank Reinhard!!! Super, ist genau das, was ich brauche!
Ich habe einigermaßen die Logik des Codes durchschaut und kann jetzt noch in einer weiteren Spalte zusätzlich die Textfarbe eines Beispieltextes entsprechen dem RGB-Wert einfärben. Damit mein Problem komplett gelöst.

Eine Frage noch: Gibt es eine unaufwändige Möglichkeit einzustellen, dass sich die Farben automatisch aktualisieren? Meine damit Folgendes: Wenn ich ein Wert für bspw. Rot alle 56 Zeilen runterkopiere oder eine Wertereihe auffüllen lasse, muss ich in jeder Zeile eine Zelle editieren (ohne was zu ändern), damit sich die Farbe entsprechend dem RGB-Wert ändert.

Hi johneff,
Rechtsklick unten auf den Tabellenblattnamen, Code anzeigen
auswählen, der Editor geht auf, nachstehenden Code
reinkopieren, Editor schliessen.
Dann mit Extras–>Makro–>Makros das Makro
"Tabelle1!RGBAnzeige ausführen lassen. Dies musst du nur
einmal machen.
In A:C hast du dann die 3 Werte für RGB, in D die
Farbnummer(1-56) und in E siehst du wie die Farbe aussieht.
Die Werte die du anfangs siehst sind die Werte der
Standardfarbeinstellung.
Jetzt kannst du nach Lust und Laune die Werte ändern,
Änderungen siehst du sofort in Spalte E.
Gruß
Reinhard

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range(„A2:C57“)) Is Nothing Then Exit Sub
If Target.Cells.Count 1 Then Exit Sub
z = Target.Row
ThisWorkbook.Colors(z - 1) = RGB(Cells(z, 1), Cells(z, 2),
Cells(z, 3))
Target.Select
End Sub

Sub RGBAnzeige()
Dim z As Byte
Application.EnableEvents = False
With Worksheets(„Tabelle1“)
.Range(„A1:E1“) = Split(„Rot Grün Blau Farbnummer Farbe“)
For z = 1 To 56
.Cells(z + 1, 4).Value = z
.Cells(z + 1, 5).Interior.ColorIndex = z
Wert = Worksheets(„Tabelle1“).Cells(z + 1,
5).Interior.Color
On Error Resume Next
.Cells(z + 1, 1) = Wert Mod 256
Wert = (Wert - Cells(z + 1, 1)) / 256
.Cells(z + 1, 2) = Wert Mod 256
Wert = (Wert - Cells(z + 1, 2)) / 256
.Cells(z + 1, 3) = Wert Mod 256
Next z
End With
Application.EnableEvents = True
End Sub

Eine Frage noch: Gibt es eine unaufwändige Möglichkeit
einzustellen, dass sich die Farben automatisch aktualisieren?
Meine damit Folgendes: Wenn ich ein Wert für bspw. Rot alle 56
Zeilen runterkopiere oder eine Wertereihe auffüllen lasse,
muss ich in jeder Zeile eine Zelle editieren (ohne was zu
ändern), damit sich die Farbe entsprechend dem RGB-Wert
ändert.

Hi johneff,
mit der Zeile
If Target.Cells.Count 1 Then Exit Sub
hatte ich festgelegt, dass sich nur dann die Farbe anpasst, wenn nur in einer Zelle was geändert wurde.
Wennn ich dich richtig verstehe, willst du gleichzeitig verschiedene Zelleneinträge ändern.
Dannn müßte der Code in etwa so aussehen (ungetestet):

Private Sub Worksheet\_Change(ByVal Target As Range)
If Intersect(Target, Range("A2:C57")) Is Nothing Then Exit Sub
For each Zelle in Target.Cells
 z = Zelle.Row
 ThisWorkbook.Colors(z - 1) = RGB(Cells(z, 1), Cells(z, 2), Cells(z, 3))
Next Zelle
Target.Select
End Sub

Gruß
Reinhard

jau, funktioniert!!!
super! nochmals vielen dank!