根据单元格中的十六进制值设置自动颜色背景?

Set an automatic color background depending on the HEX value in the cell?

我发现可以在向单元格的条件格式规则添加规则时手动完成:但是,我希望在单元格上写入十六进制值时自动显示所有 16,000,000 个十六进制值颜色,所以 "manually" 添加这 16,000,000 个十六进制值听起来有点太多了!有没有一种方法可以让所有 16,000,000 种颜色的阴影自动找到并根据单元格中的十六进制值将背景颜色应用于单元格?

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

Worksheet_Change event macro that converts the hexadecimal to an RGB should do this handily. The worksheet's HEX2DEC function 应该能够处理转换。

右键单击作品sheet 的名称选项卡并选择查看代码。当 VBE 打开时,将以下内容粘贴到代码 sheet 中,标题类似于 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 以return 进入你的工作sheet。在单元格中键入任意 6 个字符的十六进制代码以提供背景色。

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

在我看来,第一个答案很好。我在 VBA 方面不是很出名 :) 但是为了避免一些问题,最好以 # 开头十六进制数字并检查第一个符号是 #,因为我们控制了一个范围,如我所见。然后控制一个值的全长等于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