Bra*_*don 8 excel vba colors excel-vba rgba
我正在尝试在我的VBA代码中设置一个颜色的公共const.通常,我可以使用:
Dim BLUE As Long
BLUE = RGB(183, 222, 232)
Run Code Online (Sandbox Code Playgroud)
但是,由于RGB功能,没有公共const的方法.我使用在线转换器将此RGB值转换为Hex,然后我找回了B7DEE8
使用:
BLUE = &HB7DEE8
Run Code Online (Sandbox Code Playgroud)
导致完全不同的颜色.我认为这实际上可能是RGBA颜色,我已经尝试了B7DEE8__并且颜色非常接近(最后一个数字是B8),但我想知道如何实际找到正确的值.
注意:我真的不需要代码将其转换为十六进制,我只需要知道如何找到它,因为我在Excel工作表上使用了五种常量颜色,我想设置它们.
Tod*_*odd 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
Run Code Online (Sandbox Code Playgroud)
请注意,"完整"字节(255或FF)和"半满"字节(128或80)最终位于每个结果的相对侧.这就是为什么你需要以与你期望得到的相同值相反的顺序指定十六进制常量.
此外,无需使用在线转换器.Hex()函数提供给定数字的十六进制值,Int将采用十六进制格式的字符串并返回十进制值:
? Int("&hff0000")
16711680
Run Code Online (Sandbox Code Playgroud)
更新:
因此,要使用此信息创建十六进制常量,只需在上面的立即窗口中运行RGB()和Hex()语句(键入Ctrl + G即可打开和关闭它),然后使用生成的Hex值作为常量.如果该值小于6位数,则可以使用零填充左侧,但这在技术上不是必需的:
x = RGB(183, 222, 232)
? "Public Const MyBlue = &h" & hex(x)
Public Const MyBlue = &hE8DEB7
Run Code Online (Sandbox Code Playgroud)
然后将最后一行复制到您的代码中.
好的,下面将采用 Excel 2010 中单元格的颜色并提供有效的十六进制代码:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
38878 次 |
| 最近记录: |