我正在尝试编写 VBA 代码,根据单元格 A1 的值(介于 >= 单元格 A2 和 <= 单元格 A3 之间)有条件地格式化(2 色标度)单元格 A1。我使用单元格 A2 和 A3,因此我可以更改特定的值范围。
例如,如果单元格 A2 为 50 且单元格 A3 为 1,则根据 A1 的值将单元格 A1 的背景颜色从最深绿色(最高;单元格 A2;50)更改为最浅绿色(最低;单元格 A3;1)- 如果不在 50 和 1 之间,则无需格式。
我能够为类似实例(在模块中)编写以下代码。以下代码适用于给定的单元格范围,而我想要的是具有变化值的单个单元格。
Sub ColorChange()
Application.ScreenUpdating = False
' Fill a range with numbers from 1 to 25.
Dim rng As Range
Set rng = Range("A1:A25")
Range("A1") = 1
Range("A2") = 2
Range("A1:A2").AutoFill Destination:=rng
rng.FormatConditions.Delete
'Add a 2-color scale.
Dim cs As ColorScale
Set cs = rng.FormatConditions.AddColorScale(ColorScaleType:=2)
' Format the first color as light green
With cs.ColorScaleCriteria(1)
.Type = xlConditionValueLowestValue
With .FormatColor
.Color = vbGreen
' TintAndShade takes a value between -1 and 1.
' -1 is darkest, 1 is lightest.
.TintAndShade = 0.5
End With
End With
' Format the second color as dark green, at the highest value.
With cs.ColorScaleCriteria(2)
.Type = xlConditionValueHighestValue
With .FormatColor
.Color = vbGreen
.TintAndShade = -0.5
End With
End With
Application.ScreenUpdating = True
End Sub
答案1
您需要使用“Worksheet_change”方法来更改添加新数据时的格式。
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.FormatConditions.Count = 0 Then
<add your code here>
End If
End Sub
我对 VBA 中的条件格式没有太多经验。也许每次添加数据时创建一个新条件,当您打开条件格式菜单时,最终会产生很多格式组。为了将其保持为一种格式,您可能需要始终为整个范围设置格式(set rng=Range("A1:A" & target.row)
)。
VBA 免费解决方案:如果您将数据转换为表格(插入 - 来自 EXCel 2007 的表格),那么只要用户在现有数据下方立即添加行,您的公式和条件格式也将自动传输到新行。