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

Cod*_*key 16 excel rgb vba colors

我试图逐渐将单元格的背景颜色更改为黑色,我发现Range.Interior.Color方法返回一个看似随意的Long.查看MSDN上的文档,几乎没有关于此数字代表什么的信息.有没有办法从这个长度返回RGB值.我实际上需要与RGB(红色,绿色,蓝色)功能相反的功能.

Mar*_*off 39

该"任意"数字是RGB值(B*256 ^ 2 + G*256 + R)的数学组合和十六进制颜色值到十进制数(基数16到基数10)的转换,具体取决于哪种方式你想看看它.只是不同的基础.下面是我在为Excel编写的XLAM addin文件中使用的方法.这种方法已经多次派上用场了.我已将文档包含在我的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
Run Code Online (Sandbox Code Playgroud)

  • 如果 RGB() 数字被编码为 `R*256^2 + G*256 + B` 这不会是 VBA,其中最简单的事情一定是古怪的。事实上,情况正好相反:`B*256^2 + G*256 + R` (2认同)

小智 16

很高兴看到怀亚特先生使用快速的RGB颜色方法

R = C Mod 256
G = C \ 256 Mod 256
B = C \ 65536 Mod 256
Run Code Online (Sandbox Code Playgroud)

这比使用六角形str的那些快几倍,有些人推荐


Cod*_*key 12

简答:

没有内置的功能.你必须编写自己的函数.

答案很长:

从Interior.Color属性返回的long是我们习惯在html中查看颜色的典型十六进制数的十进制转换,例如"66FF66".另外,常数xlNone(-4142)可以传递给设定单元格以在背景中没有颜色,但是这些单元格RGB(255, 255, 255)Get属性中标记为白色.知道了这一点,我们就可以编写一个函数来返回一个或所有适当的RGB值.

幸运的是,Allan Wyatt先生在这里做到了!

确定颜色的RGB值


小智 8

另一个答案对我不起作用。我找到:

R = C And 255
G = C \ 256 And 255
B = C \ 256 ^ 2 And 255
Run Code Online (Sandbox Code Playgroud)

并且它工作正常。