根据单元格中的HEX值设置自动颜色背景?

时间:2015-11-06 23:45:26

标签: excel excel-vba hex background-color vba

我已经弄清楚它可以在将规则添加到单元格的条件格式规则时手动完成:但是,当我在单元格上写入HEX值时,我希望所有16,000,000个HEX值颜色自动出现,所以& #34;手动"添加这些16,000,000个HEX值听起来有点太多了!是不是有一种方法可以让所有16,000,000种颜色自动找到它们并根据单元格中的HEX值对单元格应用背景颜色?

换句话说,当我在单元格中输入0000ff时,我试图获得蓝色背景,然后当单元格的HEX值发生变化时,我希望背景更改为相应的颜色=>输入ff0000时BGC变为红色,00ff00变为绿色,ffffff变为白色......等可能为16,000,000及以上颜色。

3 个答案:

答案 0 :(得分:3)

将十六进制转换为Worksheet_ChangeRGB事件宏应该可以轻松完成。工作表的HEX2DEC function应该能够处理转换。

右键单击工作表的名称标签,然后选择查看代码。当VBE打开时,将以下内容粘贴到名为Book1 - Sheet1(Code)的代码表中。

Private Sub Worksheet_Change(ByVal Target As Range)
    On Error GoTo bm_Safe_Exit
    Application.EnableEvents = False
    Dim rng As Range, clr As String
    For Each rng In Target
        If Len(rng.Value2) = 6 Then
            clr = rng.Value2
            rng.Interior.Color = _
              RGB(Application.Hex2Dec(Left(clr, 2)), _
                  Application.Hex2Dec(Mid(clr, 3, 2)), _
                  Application.Hex2Dec(Right(clr, 2)))
        End If
    Next rng

bm_Safe_Exit:
    Application.EnableEvents = True
End Sub

点击 Alt + Q 返回工作表。在单元格中键入任意6个字符的十六进制代码以提供背景颜色。

Hexadecimal color fill

答案 1 :(得分:1)

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Cells.count <> 1 Then Exit Sub
    Target.Interior.Color = CLng("&H" & Target.Value)
End Sub

它有效,但出于某些原因,在BGR的基础上,不是RGB:ff0000给出蓝色,0000ff给出红色:D

答案 2 :(得分:1)

在我看来,第一个答案非常好。我在 VBA 方面不是很出名 :) 但是为了避免一些问题,最好以 # 开头的十六进制数并检查第一个符号是否为 #,因为我们控制了我所看到的范围。然后控制全长value等于7个符号,然后计算颜色设置背景。

干杯!

Private Sub Worksheet_Change(ByVal Target As Range)
    On Error GoTo bm_Safe_Exit
    Application.EnableEvents = False
    Dim rng As Range, clr As String
    For Each rng In Target
        If Left(rng.Value2, 1) = "#" And Len(rng.Value2) = 7 Then
            clr = Right(rng.Value2, 6)
            rng.Interior.Color = _
              RGB(Application.Hex2Dec(Left(clr, 2)), _
                  Application.Hex2Dec(Mid(clr, 3, 2)), _
                  Application.Hex2Dec(Right(clr, 2)))
        End If
    Next rng

bm_Safe_Exit:
    Application.EnableEvents = True
End Sub