excel VBA中的HEX颜色代码

rjjhvcjd  于 2023-03-31  发布在  其他
关注(0)|答案(2)|浏览(685)

你好,我使用HEX()来表示Excel中特定单元格的颜色。我做了4个例子,给出的结果令人困惑。4个中的2个给出了6位数的HEX代码,另外2个给出了4位数的HEX代码。我在网上搜索了一下,似乎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

给出的结果是
C0FF FFFF F0B000 FFFF

bkkx9g8r

bkkx9g8r1#

Range.Interior.Color属性返回RGB:

因此,在FFFF中,Hex()的前两个值被跳过。正确的值应该是00FFFF。这可以通过级联技巧实现:
Right("000000" & Hex(Worksheets(1).Cells(1, "A").Interior.Color), 6)
此外,正如@Mathiew Guindon的评论中提到的,VBA中的RGB值are reversed(无论出于何种原因)。然后需要将这两个值进行一次很好的反向。这在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

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

uxhixvfz

uxhixvfz2#

如果您正在阅读或保存字符串中的颜色十六进制代码,即00FF00表示绿色,则以下VBA代码段应将十六进制颜色值转换为VBA颜色值:

//Variables
Dim ColorName as String
Dim ColorValue as long

//Translation
ColorName='00FF00'
ColorValue=Clng("&H" & ColorName)

//Use in the Code
Me.TextBox1.BorderColor=ColorValue

应该可以。

相关问题