从Range.Interior.Color(或任何其他颜色属性)返回RGB值

我试图逐渐改变一个单元格的背景颜色为黑色,我发现Range.Interior.Color方法返回一个表面上是任意的长。 查看MSDN上的文档,这个数字代表什么几乎没有。 有没有办法从这个长期返回RGB值。 我实际上需要RGB(红,绿,蓝)function的反面。

该“任意”数字是RGB值(R * 256 ^ 2 + G * 256 + B)和hex颜色值到十进制数(基数16到10)的math组合,取决于哪种方式你想看看它。 只是不同的基地。 下面是我为Excel编写的XLAM插件文件中使用的方法。 这种方法已经派上用场了很多次了。 我已经在我的插件文件中包含了文档。

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' 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 

简答:

这没有内置的function。 你必须写自己的function。

长答案:

从Interior.Color属性返回的长整型是我们习惯在HTML中看到颜色的典型hex数字的十进制转换,例如“66FF66”。 此外,可以传递常量xlNone(-4142)来设置单元格在背景中没有颜色,但是这些单元格将从Get属性标记为白色的RGB(255, 255, 255) 。 知道这一点,我们可以编写一个返回一个或所有适当的RGB值的函数。

幸运的是,艾伦·怀亚特先生在这里已经做到了!

确定颜色的RGB值

很高兴看到Wyatt先生使用RGB的快速方法

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

这比使用hex左右中间偏右的那些速度要快许多倍

另一个答案不适合我。 我find:

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

它运作正常。