根据单元格中定义的颜色值改变颜色

根据单元格中定义的颜色值改变颜色

我想使用条件格式将单元格 B1 的颜色更改为我在单元格 A1 中定义的颜色(使用十六进制值或任何其他可行的颜色)。

例如,如果我在单元格 A1 中输入“#FF0000”,则 B1 将变为红色。如果我在单元格 A1 中输入“#00FF00”,则 B1 将变为绿色。

我怎样才能做到这一点?

答案1

听起来您想在单元格中输入十六进制颜色值,然后让右侧单元格更改为您输入的任何颜色。这可以用 VBA 来实现。此子程序被编写为留在 Sheet 对象中,但如果您想将其应用于所有工作表,您可以将其推广到 Workbook 对象中。

Private Sub Worksheet_Change(ByVal Target As Range)
    
    ' Declarations
    Dim watchRange As Range
    Dim val As String
    Dim valR As Integer, valG As Integer, valB As Integer
    
    ' Check that the target is in the range we care about
    Set watchRange = Range("A1:F10")
    If Not Intersect(watchRange, Target) Is Nothing Then
        ' Check that the cell has the right format
        val = Target.Value
        If Len(val) = 7 And Left(val, 1) = "#" Then
            ' Convert #RRGGBB to decimal RGB
            valR = Application.WorksheetFunction.Hex2Dec(Mid(val, 2, 2))
            valG = Application.WorksheetFunction.Hex2Dec(Mid(val, 4, 2))
            valB = Application.WorksheetFunction.Hex2Dec(Mid(val, 6, 2))
            
            ' Color the cell
            Target.Offset(0, 1).Interior.Color = RGB(valR, valG, valB)
        End If
    End If
    
End Sub

您真正需要更改的部分是这个位:
Set watchRange = Range("A1:F10")
这告诉 VBA,如果您更改的单元格在该范围内,您只关心更改颜色。如果没有这个位,当您在任何地方更改任何单元格时,它都会触发事件。另一个关键点是,只有当您输入新颜色时才会触发。删除单元格内容不会使相邻单元格恢复为无填充。

有更多聪明的方法可以做到这一点,但我认为这做得很好并且执行得很清晰。

相关内容