Kann ich RGB Farben statt Indexfarben nutzen?
Ich habe eine Exceltabelle in der ich durch Zahleneingabe, bestimmte Zellen in den Indexfarben einfärben kann. Ich gebe eine Zahl ein und die Zelle und alle damit verbunden Zellen oder Zellen, welche die gleiche Funktion vorweisen müssen färben sich.
Nun gibt es nur 56 Indexfarben, welche zudem auch noch ziemlich grelle Farben sind. Ich hätte gerne ein größeres Spektrum an Farben, welches ich durch die RGB Farben bekommen kann. Nur weis ich nicht wie ich dies jetzt in meine Funktion einsetzen soll.
Ich habe nur ein Feld um eine Zahl reinzuschreiben und nicht 3, also ein Feld für R, eins für G und eins für B ist nicht umsetzbar.
Anbei meine VBA Programmierung:
Sub Farbe_Topic()
' Farbe_Topic Makro: Hier wird jetzt das "Status-Feld" in der gleichen Farbe formatiert, wie die, die auch in den ARbeitsblättern gewünscht ist
' Tastenkombination: Strg+w
Range("B2:C2").Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ColorIndex = Tabelle11.Cells(2, 3) ' In dieser Zelle steht zum Beispiel eine 3 --> somit Farbe rot
.TintAndShade = 0
.PatternTintAndShade = 0
Selection.Font.ColorIndex = Tabelle11.Cells(2, 11)
End With
Range("B3:C3").Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ColorIndex = Tabelle11.Cells(3, 3)
.TintAndShade = 0
.PatternTintAndShade = 0
Selection.Font.ColorIndex = Tabelle11.Cells(3, 11)
End With
Range("B4:C4").Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ColorIndex = Tabelle11.Cells(4, 3)
.TintAndShade = 0
.PatternTintAndShade = 0
Selection.Font.ColorIndex = Tabelle11.Cells(4, 11)
End With
Range("B5:C5").Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ColorIndex = Tabelle11.Cells(5, 3)
.TintAndShade = 0
.PatternTintAndShade = 0
Selection.Font.ColorIndex = Tabelle11.Cells(5, 11)
End With
Range("B6:C6").Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ColorIndex = Tabelle11.Cells(6, 3)
.TintAndShade = 0
.PatternTintAndShade = 0
Selection.Font.ColorIndex = Tabelle11.Cells(6, 11)
End With
Range("B7:C7").Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ColorIndex = Tabelle11.Cells(7, 3)
.TintAndShade = 0
.PatternTintAndShade = 0
Selection.Font.ColorIndex = Tabelle11.Cells(7, 11)
End With
Range("B8:C8").Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ColorIndex = Tabelle11.Cells(8, 3)
.TintAndShade = 0
.PatternTintAndShade = 0
Selection.Font.ColorIndex = Tabelle11.Cells(8, 11)
End With
Vielleicht hilft dieses Bild noch dabei:
2 Antworten
Du kannst RGB auch als Zahl ausdrücken, aber das ist ziemlich abstrakt. Dein Funktion könnte aber auch einen String verarbeiten, also z.B. einen Eingabe "50,100,200"
Hier mal ein Beispielcode
Sub ZelleFaerben()
Dim VarRGBCol() As String
VarRGBCol = Split(Cells(1, 1).Value, ",")
If UBound(VarRGBCol) = 2 Then
Cells(1, 1).Interior.Color = RGB(VarRGBCol(0), VarRGBCol(1), VarRGBCol(2))
End If
End Sub
Den musste dir dann natürlich entsprechend anpassen.
Dein Code scheint ohnehin eher Code vom Makrorekorder zu sein, ich denke den kannst du auch noch übersichlicher schreiben.
Probier das mal
Sub Farbe_Topic()
'
' Farbe_Topic Makro: Hier wird jetzt das "Status-Feld" in der gleichen Farbe formatiert, wie die, die auch in den ARbeitsblättern gewünscht ist
'
' Tastenkombination: Strg+w
'
Dim WS As Worksheet, i As Long
Dim RGBColInt() As String, RGBColFon() As String
Set WS = Sheets("Tabelle11")
For i = 3 To 8
RGBColInt = Split(WS.Cells(i, 3).Value, ",")
RGBColFon = Split(WS.Cells(i, 11).Value, ",")
If UBound(RGBColInt) = 2 And UBound(RGBColFon) = 2 Then
With Range("B" & i & ":C" & i)
.Interior.Pattern = xlSolid
.Interior.PatternColorIndex = xlAutomatic
.Interior.Color = RGB(RGBColInt(0), RGBColInt(1), RGBColInt(2))
.Interior.TintAndShade = 0
.Interior.PatternTintAndShade = 0
.Font.Color = RGB(RGBColFon(0), RGBColFon(1), RGBColFon(2))
End With
End If
Next i
End Sub
Funktioniert nicht. Habe es versucht anzupassen, aber sobald keine Fehlermeldung mehr kommt. Passiert einfach nichts mehr.
Index außerhalb des Gültigkeitsbereichs --> Beim Debuggen wird dann auf " Set WS = Sheets ("Tabellell") gezeigt
Jetzt ist was passiert, aber nicht das was ich wollte.
Die Zellen B3 und C3 sind verfärbt worden aber sie ändern sich nicht wieder zurück wenn ich jetzt was anderes eingebe. Bei den anderen Zellen passiert nichts.
Es passiert allgemein garnichts mehr. Deswegen weis ich nicht wir ichs durchlaufen lassen soll oder wo der Fehler liegt..
Kannst du mir erklären, was diese Formel macht? If UBound(RGBColInt) = 2 And UBound(RGBColFon) = 2 Then
Und woher er sich da die Farben zieht?
Interior.Color = RGB(RGBColInt(0), RGBColInt(1), RGBColInt(2))
Kannst du mir erklären, was diese Formel macht? If UBound(RGBColInt) = 2 And UBound(RGBColFon) = 2 Then
Damit prüfe ich, ob die Eingabe im RGB format ist.
Wenn jemand z.B. 333 eingibt ist das keine plausible RGB EIngabe. Erst wenn es drei Zahlen sind, mit Komma getrennt. Die Split Funktion teilt einen string anhand des Trennzeichens in ein Array auf und bei RGB muss die Obergrenze 2 sein (arrays fangen typischerweise bei 0 an)
Und woher er sich da die Farben zieht?
Aus der Tabelle11 in der Zeile i spalte 3 bzw 11
Also in manchen Zellen funktioniert die Formel!
Ich für mal ein paar Tests durch
Viel Vielen Dank es funktioniert!
Muss jetzt noch schauen wie ich das auf mein anderes Blatt bekomme!
Noch eine kleine Frage:
Ich habe in Spalte B und C die Hintergrundfarben hinterlegt
In Spalte J und K die Schriftfarben.
--> Momentan ändert sich nur B und C also die Schriftfarbe und die Hintergrundfarbe.
--> Ist es möglich auch die Spalten J und K genau gleich mit zu ändern ?
Viele Wege führen nach Rom. Du könntest den "With" Block nochmal drunter kopieren und die Spalten im 2. Block anpassen anpassen.
Wenn du da flexibler sein willst könntest du die zu verändernden Spalten in ein Array hinterlegen und dies auch in eine Schleife ablaufen. Dann bleibt der Code kompakt und die Pflege bleibt einfacher.
Es ist:
.color = RGB(100,100,100)
Jede einzelne Ziffer kann von 0 bis 255 gehen so sind 24bit Farben möglich.
Aber bis Excel 2010 nur 16Bit farbenunterstützt.
Weist du wie ich das in mein VBA einbauen kann?