Hex Farbwert Invertierung
08.12.2023 13:16:05
Stefan
ich habe ein kleines Problem, welches ich in Einzelteilen mithilfe von Google lösen konnte, aber mir fehlt das Wissen es in eine Funktion zu bringen ...
Beispiel:
In meiner Excel Mappe stehen Hexadezimale Farbwerte z. B. #D50A22 - von diesem Wert sollte die aktive Zelle in dieser Hintergrundfarbe gefärbt werden und gleichzeitig der invertierte (ich hoffe das ist richtig ausgedrückt) Farbwert - in diesem Beispiel wäre das #2AF5DD als Schriftfarbe in der aktiven Zelle genutzt werden.
Die "Invertierte Farbe" ermittle ich durch die Umrechnung des Hex Wertes in Binär z. B. 0000110101010000101000100010 und dann mit der Wechsel Funktion die Invertierung z. B. 1111001010101111010111011101 (also für jede 0 eine 1 und für jede 1 eine 0). Den Wert dann wieder in Hex gewandelt ergibt den für mich invertierten Farbwert.
Bisheriger Lösungsansatz:
Eine erstellte Funktion um Hex in Bin umzuwandeln:
Public Function HEX2BIN(strHEX As String) As String
Dim charac As Long, indexes As Long, i As Long
Dim zeros As String * 4
For charac = 1 To Len(strHEX)
indexes = 0
zeros = "0000"
i = Val("&H" & Mid$(strHEX, charac, 1))
While i > 0
Mid$(zeros, 4 - indexes, 1) = i Mod 2
i = i \ 2
indexes = indexes + 1
Wend
HEX2BIN = HEX2BIN & zeros & ""
Next
HEX2BIN = RTrim$(HEX2BIN)
End Function
Eine Formel um den Bin Wert zu invertieren:
=WECHSELN(WECHSELN(WECHSELN(A1;0;2);1;0);2;1)
Und letztendlich noch eine Public Sub die beim Wechsel der aktiven Zelle prüft und färbt:
If (Left(ActiveCell.Text, 1) = "#" And Len(ActiveCell.Text) = 7) Then
ActiveCell.Interior.Color = WorksheetFunction.Hex2Dec(Mid$(ActiveCell.Text, 6, 2) & Mid$(ActiveCell.Text, 4, 2) & Mid$(ActiveCell.Text, 2, 2))
ActiveCell.Font.Color = WorksheetFunction.Hex2Dec(Mid$(ActiveCell.Text, 2, 2) & Mid$(ActiveCell.Text, 4, 2) & Mid$(ActiveCell.Text, 6, 2))
End If
Habe als Füller mal die Zeile mit der Schriftfarbe eingesetzt, aber das Ergebnis ist nicht die invertierte Farbe.
Wäre es irgendwie möglich diese Hex2Bin Funktion und den Wechsel Befehl (oder gar ein ganz anderer Weg) in diese Public Sub einzubauen?
Ich hoffe ich habe es gut genug formuliert und hoffe auf hilfreiche Tipps.
Danke im Voraus.