Kann ich RGB Farben statt Indexfarben nutzen?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

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"


vwegner 
Fragesteller
 14.02.2022, 11:18

Weist du wie ich das in mein VBA einbauen kann?

0
LtLTSmash  14.02.2022, 11:52
@vwegner

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.

0
LtLTSmash  14.02.2022, 12:09
@vwegner

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
0
vwegner 
Fragesteller
 14.02.2022, 12:32
@LtLTSmash

Funktioniert nicht. Habe es versucht anzupassen, aber sobald keine Fehlermeldung mehr kommt. Passiert einfach nichts mehr.

0
LtLTSmash  14.02.2022, 12:34
@vwegner

was gibt es denn für eine Fehlermeldung?

Und was, der erst6e oder der zweite Code?

0
vwegner 
Fragesteller
 14.02.2022, 12:42
@LtLTSmash

Index außerhalb des Gültigkeitsbereichs --> Beim Debuggen wird dann auf " Set WS = Sheets ("Tabellell") gezeigt

0
vwegner 
Fragesteller
 14.02.2022, 12:51
@vwegner

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.

0
LtLTSmash  14.02.2022, 12:51
@vwegner

Das muss der Name der Tabelle sein, wo deine Definitionen stehen. Da die in deinem Code Tabelle11 genannt werden dachte ich du hättest einen Reiter Tabelle 11. Pass das mal an und probiers nochmal

1
vwegner 
Fragesteller
 14.02.2022, 13:02
@LtLTSmash

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.

0
LtLTSmash  14.02.2022, 13:11
@vwegner

Mhh, das ist ohne die Datei zu sehen schwer zu diagnostizieren. Lass den Code doch mal schrittweise durchlaufen und schau was er sich für Farben einliest.

0
vwegner 
Fragesteller
 14.02.2022, 13:20
@LtLTSmash

Es passiert allgemein garnichts mehr. Deswegen weis ich nicht wir ichs durchlaufen lassen soll oder wo der Fehler liegt..

0
vwegner 
Fragesteller
 14.02.2022, 13:22
@LtLTSmash

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))

0
LtLTSmash  14.02.2022, 13:22
@vwegner

platziere mal im VBA Code deine Eingabe und drück dann F8. Dann solltest du einen gelben Balken sehen, der dir anzeigt was gerade abgearbeitet werden soll. Variablen kannst du z.B. auslesen indem du den Mauszeiger darauf stehen lässt.

0
LtLTSmash  14.02.2022, 13:25
@vwegner
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

1
vwegner 
Fragesteller
 14.02.2022, 13:29
@LtLTSmash

Also in manchen Zellen funktioniert die Formel!
Ich für mal ein paar Tests durch

0
vwegner 
Fragesteller
 14.02.2022, 13:32
@vwegner

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 ?

0
LtLTSmash  14.02.2022, 14:12
@vwegner

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.

1
vwegner 
Fragesteller
 15.02.2022, 09:37
@LtLTSmash

Vielen Dank! Du hast mir sehr geholfen

1

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.