我想获得颜色的十六进制值。问题是在 vba 中,值 .Font.Color.RGB 以十进制表示,当我将该值更改为十六进制时,我没有得到我需要的值。
例如:
在 vba 中,颜色 blue Purple 的值是 14822282。在 html 中,值为 #8A2BE2 但是当我使用 Hex(14822282) 方法时,我得到 E22B8A。
怎么可能得到正确的数字?
它不起作用的原因是您需要使用按位运算将该十进制值拆分为 3 个分量(R、G、B),然后将每个分量分别转换为十六进制。然后,您可以将十六进制值连接在一起,这将获得您的 HTML 十六进制值。
这是一个例子:
要获得绿色组件,您需要进行如下操作:
14822282 >> 8
只取字节值并将其转换为十六进制,这将为您提供 0x2B,即 RGB 的 G 分量。
要获得红色分量,右移 16 位:
14822282 >> 16
这将为您提供十六进制的 0xE2。
要获得蓝色分量,请去掉除右边最远 8 位之外的所有位。你会得到0x8A。
这就是你得到#E22B8A的原因。
试试这个
Sub Sample()
Dim hexCode
hexCode = Hex(14822282)
For Index = 1 To Len(hexCode)
If InStr("01234567890ABCDEF", Mid$(hexCode, Index, 1)) = 0 Then
MsgBox "Not a valid hex color code"
Exit Sub
End If
Next
If Len(hexCode) = 6 Then _
Debug.Print "&H00" & Right(hexCode, 2) & _
Mid$(hexCode, 3, 2) & Left(hexCode, 2) & "&"
End Sub