VBA 中的十六进制颜色代码

Anc*_* Hu 4 excel hex vba

您好,我正在使用 HEX() 来指示 Excel 中特定单元格的颜色。我做了 4 个例子,给出的结果令人困惑。4 个中的 2 个给出了 6 位十六进制代码,另外 2 个给出了 4 位十六进制代码。我在网上查了一下,好像HEX代码必须是6位数字?那么这4位数字代码代表什么呢?

我也将这些 4 位代码放入https://www.color-hex.com/中,但没有找到任何结果。

Sub showcolor()

Debug.Print Hex(ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count).Cells(10, "AB").Interior.Color)
Debug.Print Hex(ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count).Cells(34, "AB").Interior.Color)
Debug.Print Hex(ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count).Cells(13, "AB").Interior.Color)
Debug.Print Hex(ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count).Cells(12, "AB").Interior.Color)

End Sub
Run Code Online (Sandbox Code Playgroud)

给出的结果是

C0FF FFFF F0B000 FFFFFF

Vit*_*ata 6

Range.Interior.Color属性返回 RGB:

因此,在 中FFFF,Hex() 的前两个值被跳过。正确的应该是00FFFF. 这可以通过串联技巧来实现:

Right("000000" & Hex(Worksheets(1).Cells(1, "A").Interior.Color), 6)

此外,正如 @Mathiew Guindon 的评论中提到的,VBA 中的 RGB 值是相反的(无论出于何种原因)。然后需要将这两者进行良好的反转。这是在HexToRgb()函数中完成的:

Sub TestMe()

    Worksheets(1).Cells(1, "A").Interior.Color = vbYellow
    Debug.Print Hex(Worksheets(1).Cells(1, "A").Interior.Color)  'FFFF
    Debug.Print Worksheets(1).Cells(1, "A").Interior.Color       '65535

    Dim hexColor As String
    hexColor = Right("000000" & Hex(Worksheets(1).Cells(1, "A").Interior.Color), 6)

    Debug.Print HexToRgb(hexColor)                               'FFFF00

End Sub

Public Function HexToRgb(hexColor As String) As String

    Dim red As String
    Dim green As String
    Dim blue As String

    red = Left(hexColor, 2)
    green = Mid(hexColor, 3, 2)
    blue = Right(hexColor, 2)

    HexToRgb = blue & green & red

End Function
Run Code Online (Sandbox Code Playgroud)

并且ffff00是黄色的 - https://www.color-hex.com/color/ffff00

在此输入图像描述