Wie kann ich eine Farbe mit Visual Basic auslesen und einfügen?

3 Antworten

Ich habe mal drei Makros geschieben. Vielleicht hilft Dir das. Die Farbt habe ich Global deklariert, so dass er in allen Tabellen der Mappe verwendet werden kann.  Color (Cl1) ist als Long deklariert.

Im erstenMakro wird die Farbe Cl1 festgelegt (hier die der ausgewählten Zelle).

Im zweiten wird die Zellenfarbe  auf Cl1 gesetzt.

Im letzten Makro wird die Zelle komplett zurückgesetzt, also auf den Standardwert.

Global Cl1 As Long

Sub GetColor()
' Tastenkombination: Strg+g'
Cl1 = Selection.Interior.Color
End Sub

Sub SetColor()
' Tastenkombination: Strg+s
Selection.Interior.Color = Cl1
End Sub

Sub ColorClear()
' Tastenkombination: Strg+c'
With Selection.Interior
.Pattern = xlNone
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End Sub

Am einfachsten nimmst du eine Musterzelle (Zeile z0, Spalte s0), die die gewünschte Farbe hat und deren Farbe sich nicht ändert:

Cells(zd, 6).Interior.Color = Cells(z0, s0).Interior.Color

Wenn das nicht geht, liest du diese Farbe einmal aus und setzt sie anstelle von vbRed ein

Auslesen:

MsgBox "&H" & Hex$(Cells(zd, 6).Interior.Color) & "&"

oder

MsgBox Cells(zd, 6).Interior.Color

(das Auslesen ist nur ein einziges Mal nötig, danach kannst du die betreffende Zeile wieder löschen)

(Oder du gibst gleich in das Direktfenster ein:

? "&H" & Hex$(Cells(zd, 6).Interior.Color) & "&"
'bzw.
? Cells(zd, 6).Interior.Color

)

Einfügen:

(die xxxxxxxx sind die "Hexadezimalziffern" (0-9, A-F), die du oben erhalten hast):

Const Standardfarbe As Long = &Hxxxxxxxx&

oder (das n ist die Zahl, die du oben erhalten hast):

Const Standardfarbe As Long = n

(Konstanten müssen ziemlich am Anfang der Codedatei definiert werden)

und an der betreffenden Codestelle:

Cells(zd, 6).Interior.Color = Standardfarbe
Woher ich das weiß:Berufserfahrung – Software-Entwickler

Also auslesen kannst du die Farbe wie folgt:

Gehe in deinem Arbeitsblatt mit ALT+F11 in den VBA Code deiner Tabelle und lege dann ein Modul an. Dort legst du folgenden Code ab:

Function HF(r As Range) As Integer
HF = r.Interior.ColorIndex
End Function

dann kannst du mit folgender Formel in irgendeiner Zelle dir die Hintergrundfarbe einer beliebigen Zelle ausgeben lassen, hier z.b. die Farbe von A1:

=HF(A1)
AquaMedium 
Fragesteller
 19.06.2015, 11:07

Da tust sich gar nichts bei mir..

0
schmiddi1967  19.06.2015, 11:09
@AquaMedium

Hast du das denn auch in ein Modul gelegt? Wenn es nur in der Tabelle liegt tut sich nichts.

0
Iamiam  19.06.2015, 12:57
@AquaMedium

color index liest nur die fest vorgegebenen Farben

Nur .color ist da mächtiger. und lies dich mal in RGB ein (Rot Grün Blau - Werte, so wie sie im Weitere-Farben-Dialog wiedergegeben werden)

kanns grad nicht ausführlicher machen, muss weg.

1