如何在Excel / VBA中获取RGB颜色的相应Hex值?

时间:2011-05-14 16:52:24

标签: excel vba colors excel-vba rgba

我正在尝试在我的VBA代码中设置颜色的公共const。通常,我可以使用:

Dim BLUE As Long
BLUE = RGB(183, 222, 232)

然而,由于RGB功能,没有公共const的方法。我使用在线转换器将此RGB值转换为Hex,然后我回到了B7DEE8

使用:

BLUE = &HB7DEE8

导致完全不同的颜色。我认为这实际上可能是RGBA颜色,我已经尝试了B7DEE8__并且颜色非常接近(最后一个数字是B8),但我想知道如何实际找到正确的值。

注意:我真的不需要代码将其转换为十六进制,我只需要知道如何找到它,因为我在Excel工作表上使用了五种常量颜色,我想设置它们

5 个答案:

答案 0 :(得分:11)

您必须将字节转换为顺序

BLUE = &HE8DEB7

获取正确的颜色值。

答案 1 :(得分:10)

明显反转的原因是RGB()函数实际上创建了BGR值。

更具体地说,红色字节是低位字节,蓝色字节是高位字节(至少是四位的三分之一)。

在立即窗口中尝试此示例:

x = RGB(255, 0, 128) ' full red, half blue
? hex(x)
8000FF

x = RGB(128, 0, 255) ' half red, full blue
? hex(x)
FF0080

请注意,“完整”字节(255或FF)和“半满”字节(128或80)最终位于每个结果的相对侧。这就是为什么你需要以与你期望得到的相同值相反的顺序指定十六进制常量。

此外,无需使用在线转换器。 Hex()函数提供给定数字的十六进制值,Int将采用十六进制格式的字符串并返回十进制值:

? Int("&hff0000") 
 16711680

<强>更新

因此,要使用此信息创建十六进制常量,只需在上一个窗口中运行RGB()和Hex()语句(按Ctrl + G打开并关闭它),然后使用生成的Hex值作为你的常数。如果该值小于6位数,您可以用零填充左侧,但这在技术上是没有必要的:

x = RGB(183, 222, 232)
? "Public Const MyBlue = &h" & hex(x)
Public Const MyBlue = &hE8DEB7

然后将最后一行复制到您的代码中。

答案 2 :(得分:3)

好的,以下内容将采用Excel 2010中单元格的颜色并提供有效的Hexcode:

Public Function getHexCol(a As Range)

' In excel type in for example getHexCol(A1) to get the hexcode of the color on     A1.
Dim strColour As String
Dim hexColour As String
Dim nColour As Long
Dim nR As Long, nB As Long, nG As Long

strColour = a.Interior.Color
If Len(strColour) = 0 Then Exit Function

nColour = Val(strColour) ' convert string to decimal number
hexColour = Hex(nColour) ' convert decimal number to hex string
While Len(hexColour) < 6 ' pad on left to 6 hex digits
hexColour = "0" & hexColour
Wend

nB = CLng("&H" & Mid(hexColour, 1, 2))
nG = CLng("&H" & Mid(hexColour, 3, 2))
nR = CLng("&H" & Mid(hexColour, 5, 2))

getHexCol = Hex(RGB(nB, nG, nR))
End Function

答案 3 :(得分:1)

Function GetRGB(ByVal cell As Range) As String

Dim R As String, G As String
Dim b As String, hexColor As String
hexCode = Hex(cell.Interior.Color)

'Note the order excel uses for hex is BGR.
b = Val("&H" & Mid(hexCode, 1, 2))
G = Val("&H" & Mid(hexCode, 3, 2))
R = Val("&H" & Mid(hexCode, 5, 2))

GetRGB = R & ":" & G & ":" & b
End Function

请注意,excel RGB值向后(BGR)

答案 4 :(得分:-1)

我测试了这段代码,不能真正按照Howard的回答