Farbspielerei -noch eine...- fünf Methoden eine Farbe zu setzen

.. das wohl mächtigste Werkzeug in Bill Gates' Büro-Sippe. Ob reine Formeln, PowerQuery oder VBA. Hier bleiben kaum Wünsche unerfüllt.
Benutzeravatar
d'r Bastler
Beiträge: 832
Registriert: 29. Aug 2022, 13:20
Hat sich bedankt: 224 Mal
Danksagung erhalten: 119 Mal

Farbspielerei -noch eine...- fünf Methoden eine Farbe zu setzen

#1

Beitrag von d'r Bastler »

Moin allerseits,

wenn man nix Besseres zu tun hat, spielt man mit Farben. Für das angehängte Modul habe ich mich mal etwas mit der Benennung von Farben in VBA beschäftig. Derer gibt es gleich fünf Systeme:
  • Colorindex 1 - 46
  • Colorindex als xlBlack (nur XL) bzw. vbBlack (in allen Apps)
  • Farbwerte in Hex - entweder mit Prefix # oder &H
  • Dezimal als Long
  • RGB(iR, iG, iB)
Die numerischen, ob jetzt RGB oder Dezimal haben den klaren Vorteil, dass man damit Farben per Formel setzen kann. Zum Beispiel für Farbverläufe oder ~Tabellen. Die anderen erreicht man bequem mit handgeschnitzten Enums (Grüße an thowe! :P )

msgbox.jpg
Das Modul enthält
  • ein kleine Sub, mit man vier/fünf Farb-Definitionen (z.B. einer Zelle, aber das ist natürlich ausbaubar) auslesen kann
  • zwei Enums zum bequemen Wählen von Farbwerten per IntelliSense.
  • einen TableMaker zur Erstellung von Farbtabellen
  • eine noch kleinere Sub zum Testen der Enums
Warum das Ganze? Weil ich auch ziemlich genau 50 Jahre nach meinen ersten Farbfernsehen-Erfahrungen immer noch Nena-mäßig drauf bin: "Alles so schön bunt hier!"
mdlMultiColor.bas
Import als Allg. Modul, Aufruf über Alt+F8 jeweils fürs aktive Sheet.
Viel Spaß damit ;)
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Folgende Benutzer bedankten sich beim Autor d'r Bastler für den Beitrag:
thowe
d'r Bastler von den VBAsteleien.de
Win 10 + Office 2019 & Win11 + Office 2021 + Visio 2019 pro & macOS.X15 + Office2019pro & Android12 & XL365
Benutzeravatar
thowe
Beiträge: 230
Registriert: 12. Sep 2022, 16:57
Hat sich bedankt: 109 Mal
Danksagung erhalten: 79 Mal
Kontaktdaten:

Re: Farbspielerei -noch eine...- fünf Methoden eine Farbe zu setzen

#2

Beitrag von thowe »

Ha & danke...

Da muss ich mal meine Exceldatei ColorPlayarounds.xlms heraussuchen, was ich über diesen Fundus zusätzlich zu deinen Farbspielerein beitragen kann.

Nicht übersehen

Bei den &H Werten müssen die HEX-Werte in Form von GGBBRR eingegeben werden. Es wird also Rot mit Grün getauscht....

lg thowe
Folgende Benutzer bedankten sich beim Autor thowe für den Beitrag:
d'r Bastler
Benutzeravatar
d'r Bastler
Beiträge: 832
Registriert: 29. Aug 2022, 13:20
Hat sich bedankt: 224 Mal
Danksagung erhalten: 119 Mal

Re: Farbspielerei -noch eine...- fünf Methoden eine Farbe zu setzen

#3

Beitrag von d'r Bastler »

Moin thowe,

Dein Hinweis mit dem Tausch von R & B von Hex nach RGB löst in mir ein kleines Fragezeichen aus. Der Tausch ist natürlich da, aber dann verstehe ich meinen eigenen Code zur MsgBox nicht mehr ... zumindest nicht mehr heute Abend :P

Schöne Grüße
d'r Bastler von den VBAsteleien.de
Win 10 + Office 2019 & Win11 + Office 2021 + Visio 2019 pro & macOS.X15 + Office2019pro & Android12 & XL365
xlKing
Beiträge: 52
Registriert: 30. Mai 2024, 19:42
Hat sich bedankt: 5 Mal
Danksagung erhalten: 52 Mal
Kontaktdaten:

Re: Farbspielerei -noch eine...- fünf Methoden eine Farbe zu setzen

#4

Beitrag von xlKing »

Hi ihr,

nur um das richtig zu stellen. Das Hexformat liegt in BGR vor. Es wird also nicht Rot mit Grün sondern Rot mit Blau getauscht. Das macht auch mehr Sinn denn Hex wird wie binär immer von rechts nach links gelesen. Der Wert 255 = Rot = FF. Alle weiteren Hexwerte gehen dann nach links weiter. 0100, 0101 ... 01FF usw. bis FFFF bzw. rgb(255,255,0) - ist dann Gelb. Niedrigere aber gleiche Werte bei Rot und Grün ergeben ein dunkleres Gelb. Gleiche Werte bei Rot Grün und Blau ergeben einen Grauton.

Der Hex-Wert hat auch seine Vorteile. Wenn man einen Farbwert als Zahl vorliegen hat und diesen mit der Hex-Funktion umwandelt, kann man schnell sehen, welche RGB-Werte dahinter stehen. Wie gesagt: Rot ist immer Rechts.

------------

Nachtrag: &HFFFF ergibt leider -1 womit die Farbe weiß wird. Will man damit Gelb erreichen, muss man noch den Indikator für eine Longzahl hinten anhängen. &HFFFF&

Das ist in Excel so, dass ab einem Wert der Integer überschreitet erstmal negativ Zahlen dargestellt werden. bevor es mit Long weiter geht. Damit habe ich mich auch schon öfters beschäftigt. Aber mit wenn man ein & hinten ans Hex anhängt, erhält man den richtigen Wert.

Gruß Mr. K.
Folgende Benutzer bedankten sich beim Autor xlKing für den Beitrag (Insgesamt 2):
thowe, d'r Bastler
Benutzeravatar
thowe
Beiträge: 230
Registriert: 12. Sep 2022, 16:57
Hat sich bedankt: 109 Mal
Danksagung erhalten: 79 Mal
Kontaktdaten:

Re: Farbspielerei -noch eine...- fünf Methoden eine Farbe zu setzen

#5

Beitrag von thowe »

hey xlking

korrekt, sorry -> ich saß im Zug, natürlich BGR also Blau Grün Rot in &H (der HEX-Werte), danke für den Hinweis....

lg
Benutzeravatar
d'r Bastler
Beiträge: 832
Registriert: 29. Aug 2022, 13:20
Hat sich bedankt: 224 Mal
Danksagung erhalten: 119 Mal

Re: Farbspielerei -noch eine...- fünf Methoden eine Farbe zu setzen

#6

Beitrag von d'r Bastler »

Moin, ihr Farbkünstler,

habt Ihr eigentlich bemerkt, dass wenn man iR, iG, iB als Double deklariert, dann sogar der tatsächliche Mittelwert 0...255 = 127,5 genutzt werden kann? Als ich das gewagt hatte, habe ich erwartet gnadenlos Debugged zu werden. Aber nichts dergleichen. Umgesetzt werden dann trotzdem nur aufgerundete Integer und mit meiner GetColorValues auch nur so erkannt.

Schönes Wochenende!
d'r Bastler von den VBAsteleien.de
Win 10 + Office 2019 & Win11 + Office 2021 + Visio 2019 pro & macOS.X15 + Office2019pro & Android12 & XL365
knobbi38
Beiträge: 25
Registriert: 20. Okt 2024, 14:15
Hat sich bedankt: 2 Mal
Danksagung erhalten: 19 Mal
Kontaktdaten:

Re: Farbspielerei -noch eine...- fünf Methoden eine Farbe zu setzen

#7

Beitrag von knobbi38 »

Und ich dachte immer, die Hälfte von 0..255 wäre 127. :o
Folgende Benutzer bedankten sich beim Autor knobbi38 für den Beitrag:
d'r Bastler
Benutzeravatar
d'r Bastler
Beiträge: 832
Registriert: 29. Aug 2022, 13:20
Hat sich bedankt: 224 Mal
Danksagung erhalten: 119 Mal

Re: Farbspielerei -noch eine...- fünf Methoden eine Farbe zu setzen

#8

Beitrag von d'r Bastler »

Moin Ulrich
es ist unglaublich - bei mancher Deiner Antworten komme ich nur nicht vor wie halb dumm, Du schaffst immer wieder ganz dumm! :lol:

Nebenbei musste ich lernen, dass meine GetColorValues dringend noch einiger Korrekturen bedarf. Ich liefere nach ...

Grüße
d'r Bastler von den VBAsteleien.de
Win 10 + Office 2019 & Win11 + Office 2021 + Visio 2019 pro & macOS.X15 + Office2019pro & Android12 & XL365
knobbi38
Beiträge: 25
Registriert: 20. Okt 2024, 14:15
Hat sich bedankt: 2 Mal
Danksagung erhalten: 19 Mal
Kontaktdaten:

Re: Farbspielerei -noch eine...- fünf Methoden eine Farbe zu setzen

#9

Beitrag von knobbi38 »

@D'r Bastler:
Kennst du den? Wie viel Finger hat ein C-Programmierer ? Antwort: 9 - {0..9} :mrgreen:

Hallo VB6/VBA-Fans,

hier noch ein kleine Spielerei mit Anweisungen aus VB6/VBA, die nur sehr selten verwendet werden und kaum jemand noch kennt:

Code: Alles auswählen

Public Type COLOR_RGB
  R As Byte
  G As Byte
  B As Byte
  dummy As Byte
End Type

Public Type COLOR_LONG
  Value As Long
End Type

Sub Test()
  Dim udtColRgb As COLOR_RGB
  Dim udtColLng As COLOR_LONG
  
  Dim strMsg As String
  
  With udtColRgb
    .R = 135: .G = 255: .B = 120
  End With
  
  LSet udtColLng = udtColRgb
  
  strMsg = "Dezimalwert: " & vbTab & "{0}" & vbCrLf & _
        "Hex-Wert: &H od. #" & vbTab & "{1}" & vbCrLf & _
        "RGB-Wert: " & vbTab & "RGB (" & "{2}" & ", " & "{3}" & ", " & "{4}" & ")"
        
  With udtColLng
    strMsg = Replace(strMsg, "{0}", CStr(.Value))
    strMsg = Replace(strMsg, "{1}", CStr(Hex(.Value)))
  End With
  
  With udtColRgb
    strMsg = Replace(strMsg, "{2}", CStr(.R))
    strMsg = Replace(strMsg, "{3}", CStr(.G))
    strMsg = Replace(strMsg, "{4}", CStr(.B))
  End With
  
  MsgBox strMsg
End Sub
Wer das noch nicht kennt, einfach das Ganze mal im Einzelschritt durchgehen und dann die lokalen Variablen beobachten.
Das geht natürlich auch anders herum, also Long -> RGB, aber das bitte mal selber ausprobieren.

Grüße
Knobbi38
Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste