我想使用条件格式将单元格 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,如果您更改的单元格在该范围内,您只关心更改颜色。如果没有这个位,当您在任何地方更改任何单元格时,它都会触发事件。另一个关键点是,只有当您输入新颜色时才会触发。删除单元格内容不会使相邻单元格恢复为无填充。
有更多聪明的方法可以做到这一点,但我认为这做得很好并且执行得很清晰。