2014-06-10 2 views
8

Ich habe versucht, die Hintergrundfarbe einer Zelle schrittweise in Schwarz zu ändern, und ich habe festgestellt, dass die Range.Interior.Color-Methode eine Long zurückgibt scheinbar willkürlich. Wenn Sie sich die Dokumentation auf MSDN ansehen, gibt es fast nichts darüber, was diese Nummer darstellt. Gibt es eine Möglichkeit, den RGB-Wert von dieser Länge zurückzugeben. Ich brauche das Gegenteil der RGB-Funktion (rot, grün, blau).RGB-Werte von Range.Interior.Color (oder einer anderen Color-Eigenschaft) zurückgeben

Antwort

12

Kurze Antwort:

Es gibt keine Funktionalität für diese gebaut wird. Sie müssen Ihre eigene Funktion schreiben.

Lange Antwort:

Die lange, dass von der Interior.Color Eigenschaft zurückgegeben wird, ist eine Dezimal-Umwandlung der typischen hexadezimalen Zahlen, die wir zu sehen für Farben in HTML verwendet werden, z.B. "66FF66". Zusätzlich kann die Konstante xlNone (-4142) an die Set-Zelle übergeben werden, um keine Farbe im Hintergrund zu haben, jedoch sind solche Zellen aus der Get-Eigenschaft mit Weiß RGB(255, 255, 255) markiert. Wenn wir das wissen, können wir eine Funktion schreiben, die einen oder alle geeigneten RGB-Werte zurückgibt.

Glücklicherweise hat ein freundlicher Mr. Allan Wyatt genau das hier gemacht!

Determining the RGB Value of a Color

26

That "beliebige" Anzahl ist eine mathematische Kombination der RGB-Werte (R * 256^2 + G * 256 + B) und eine Umwandlung des hex Farbwertes in eine Dezimalzahl (Basis 16 auf Basis 10), je nachdem, auf welche Weise Sie es betrachten möchten. Nur verschiedene Basen. Unten ist die Methode, die ich in der XLAM-Add-Datei verwende, die ich für Excel geschrieben habe. Diese Methode hat sich oft bewährt. Ich habe die Dokumentation in meine Add-In-Datei eingefügt.

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
' Function   Color 
' Purpose    Determine the Background Color Of a Cell 
' @Param rng   Range to Determine Background Color of 
' @Param formatType Default Value = 0 
'      0 Integer 
'      1 Hex 
'      2 RGB 
'      3 Excel Color Index 
' Usage    Color(A1)  --> 9507341 
'      Color(A1, 0) --> 9507341 
'      Color(A1, 1) --> 91120D 
'      Color(A1, 2) --> 13, 18, 145 
'      Color(A1, 3) --> 6 
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
Function Color(rng As Range, Optional formatType As Integer = 0)  As Variant 
    Dim colorVal As Variant 
    colorVal = Cells(rng.Row, rng.Column).Interior.Color 
    Select Case formatType 
     Case 1 
      Color = Hex(colorVal) 
     Case 2 
      Color = (colorVal Mod 256) & ", " & ((colorVal \ 256) Mod 256) & ", " & (colorVal \ 65536) 
     Case 3 
      Color = Cells(rng.Row, rng.Column).Interior.ColorIndex 
     Case Else 
      Color = colorVal 
    End Select 
End Function 
10

gut zu sehen, dass Herr Wyatt die schnelle Methode der Farbe verwendet

R = C Mod 256 
G = C \ 256 Mod 256 
B = C \ 65536 Mod 256 

, die ein Vielfaches schneller ist auf RGB als die hex str mit linken Mitte rechts , die einige

2

empfehlen Die andere Antwort funktionierte nicht für mich. Ich fand das:

R = C And 255 
G = C \ 256 And 255 
B = C \ 256^2 And 255 

und es funktionierte einwandfrei.

+0

Ihr und Harrys beide arbeiten. F.i. Roter Wert von 'RGB (50,100,200) = RGB (50,100,200) Mod 256' und roter Wert von 'RGB (50,100,200) = RGB (50,100,200) Und 255' – Mill

Verwandte Themen