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

问题描述 投票:0回答:4

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

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

excel hex background-color vba
4个回答
23
投票
将十六进制转换为

RGBWorksheet_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 个字符的十六进制代码以提供背景颜色。

        


5
投票
在我看来,第一个答案非常好。我对 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
    

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


0
投票

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
    
© www.soinside.com 2019 - 2024. All rights reserved.