我发现它可以在向单元格的条件格式规则添加规则时手动完成:但是,我希望当我在单元格上写入十六进制值时,所有 16,000,000 个十六进制值颜色自动显示,因此“手动”添加这 16,000,000 个十六进制值听起来有点太多了!难道没有办法让所有 16,000,000 种色调自动找到它们的方式并根据单元格中的十六进制值将背景颜色应用到单元格吗?
换句话说,当我在单元格中输入 0000ff 时,我试图获得蓝色背景,然后我希望当单元格的十六进制值更改时,背景更改为相应的颜色 => 当 ff0000 为时,BGC 更改为红色输入,然后当 00ff00 时为绿色,当 ffffff 时为白色......等等,可能为 16,000,000 及以上颜色。
RGB 的 Worksheet_Change 事件宏应该可以轻松完成此操作。工作表的 HEX2DEC 函数 应该能够处理转换。
右键单击工作表的名称选项卡并选择查看代码。当 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 个字符的十六进制代码以提供背景颜色。
干杯!
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
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
Alexey Ryzhkov 提交的内容进行了轻微更新。添加在单元格清空时将背景重置为“无”的功能。
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 IsEmpty(rng.Value2) Then
rng.Interior.Color = xlNone
ElseIf Trim(rng.Value2) = "" Then
rng.Interior.Color = xlNone
ElseIf 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