首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Excel/VBA中获取RGB颜色的相应十六进制值?

如何在Excel/VBA中获取RGB颜色的相应十六进制值?
EN

Stack Overflow用户
提问于 2011-05-15 00:52:24
回答 6查看 44K关注 0票数 9

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

代码语言:javascript
运行
复制
Dim BLUE As Long
BLUE = RGB(183, 222, 232)

但是,由于RGB函数的原因,无法公开const。我使用在线转换器将这个RGB值转换为十六进制,然后我得到了B7DEE8

使用:

代码语言:javascript
运行
复制
BLUE = &HB7DEE8

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

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

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-05-15 01:03:17

您必须将这些字节按顺序反转

代码语言:javascript
运行
复制
BLUE = &HE8DEB7

来获得正确的颜色值。

票数 11
EN

Stack Overflow用户

发布于 2011-05-15 09:34:51

表面上相反的原因是RGB()函数实际上创建了一个BGR值。

更具体地说,红色字节是低位字节,蓝色字节是高位字节(或者至少是四个字节中的第三个字节)。

在“即时”窗口中尝试此示例:

代码语言:javascript
运行
复制
x = RGB(255, 0, 128) ' full red, half blue
? hex(x)
8000FF

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

请注意,在每个结果中,"full“字节(255或FF)和"half-full”字节(128或80)结束于相反的两端。这就是为什么你需要以相反的顺序指定十六进制常量,而不是你期望得到相同的值。

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

代码语言:javascript
运行
复制
? Int("&hff0000") 
 16711680

更新:

因此,要使用此信息创建十六进制常量,只需像上面那样在即时窗口中运行RGB()和十六进制()语句(键入Ctrl+G以打开和关闭它),然后使用结果十六进制值作为常量。如果值的长度小于6位,则可以在左侧填充零,但从技术上讲,这并不是必需的:

代码语言:javascript
运行
复制
x = RGB(183, 222, 232)
? "Public Const MyBlue = &h" & hex(x)
Public Const MyBlue = &hE8DEB7

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

票数 11
EN

Stack Overflow用户

发布于 2015-06-10 22:28:00

好的,下面的代码将采用Excel 2010中单元格的颜色,并提供有效的十六进制代码:

代码语言:javascript
运行
复制
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
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6003324

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档