Stavo cercando di modificare in modo incrementale il colore di sfondo di una cella in nero, e ho scoperto che il metodo Range.Interior.Color restituisce un Long che è apparentemente arbitrario. Guardando la documentazione su MSDN, non c'è quasi nulla su ciò che rappresenta questo numero. C'è un modo per restituire il valore RGB da questo lungo. Ho effettivamente bisogno del contrario della funzione RGB (rosso, verde, blu).Restituisce i valori RGB da Range.Interior.Color (o qualsiasi altra proprietà Color)
risposta
Risposta breve:
Non v'è alcun costruito in funzione di questo. Devi scrivere la tua funzione.
lungo Risposta:
Il tempo che viene restituito dalla proprietà Interior.Color è una conversione decimale dei numeri esadecimali tipici che siamo abituati a vedere per i colori in HTML per esempio "66FF66". Inoltre, la costante xlNone (-4142) può essere passata per impostare la cella in modo che non abbia colore sullo sfondo, tuttavia tali celle sono contrassegnate in bianco RGB(255, 255, 255)
dalla proprietà Get
. Sapendo questo, possiamo scrivere una funzione che restituisce uno o tutti i valori RGB appropriati.
Fortunatamente, un tipo che il signor Allan Wyatt ha fatto proprio qui!
Questo numero "arbitrario" è una combinazione matematica dei valori RGB (R * 256^2 + G * 256 + B) e una conversione del valore di colore esadecimale in un numero decimale (base 16 alla base 10), a seconda del modo in cui si desidera guardarlo. Solo basi diverse. Di seguito è riportato il metodo che utilizzo nel file addin XLAM che ho scritto per Excel. Questo metodo è tornato utile molte volte. Ho incluso la documentazione nel mio file di addin.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' 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
bello vedere che il signor Wyatt utilizza il metodo veloce di colore in RGB
R = C Mod 256
G = C \ 256 Mod 256
B = C \ 65536 Mod 256
che è molte volte più veloce di quelli che utilizzano esadecimale str con sinistro metà destra che alcuni consigliamo
L'altra risposta non ha funzionato per me. Ho trovato che:
R = C And 255
G = C \ 256 And 255
B = C \ 256^2 And 255
e ha funzionato correttamente.
Sia Yours che Harry lavorano entrambi. F.I. Valore rosso di 'RGB (50,100,200) = RGB (50,100,200) Mod 256' e valore rosso di 'RGB (50,100,200) = RGB (50,100,200) E 255' – Mill