0

我想获得颜色的十六进制值。问题是在 vba 中,值 .Font.Color.RGB 以十进制表示,当我将该值更改为十六进制时,我没有得到我需要的值。

例如:

在 vba 中,颜色 blue Purple 的值是 14822282。在 html 中,值为 #8A2BE2 但是当我使用 Hex(14822282) 方法时,我得到 E22B8A。

怎么可能得到正确的数字?

4

2 回答 2

1

它不起作用的原因是您需要使用按位运算将该十进制值拆分为 3 个分量(R、G、B),然后将每个分量分别转换为十六进制。然后,您可以将十六进制值连接在一起,这将获得您的 HTML 十六进制值。

这是一个例子:

要获得绿色组件,您需要进行如下操作:

14822282 >> 8

只取字节值并将其转换为十六进制,这将为您提供 0x2B,即 RGB 的 G 分量。

要获得红色分量,右移 16 位:

14822282 >> 16

这将为您提供十六进制的 0xE2。

要获得蓝色分量,请去掉除右边最远 8 位之外的所有位。你会得到0x8A。

这就是你得到#E22B8A的原因。

于 2013-11-14T17:16:10.840 回答
1

试试这个

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

在此处输入图像描述

于 2013-11-14T17:20:20.243 回答