如何根据每个单元格的值和固定单元格的值有条件地格式化VBA中的列?

时间:2015-04-17 19:28:51

标签: excel vba date excel-vba conditional-formatting

我需要为列设置条件格式,其中每个单元格都是根据从电子表格中的单元格派生的另外两个值突出显示的。值是日期。这需要在VBA中完成(出于很多原因:代码与其他软件一起工作并清除内容,将行组合在一起等)。我失败了许多方法,目前我没有完成以下任务:

Sheets("Trial").Activate
With ActiveSheet.Range("E:E")
.Select
.FormatConditions.Add Type:=xlCellValue, Operator:=xlBetween, Formula1:="="
& (Range("P1").Value - 1), Formula2:="=" & (Range("P1").Value + 6)
.FormatConditions(1).Interior.Color = RGB(255, 0, 0)
End With

最终,当值在P1-1和P1 + 6之间时,我需要E列中的单元格变为红色。即使我提取此代码并自行运行它,我也会收到一个过程调用错误。想法?

2 个答案:

答案 0 :(得分:0)

请尝试:

Sheets("Trial").Activate
With Columns("E:E")
.FormatConditions.Add Type:=xlExpression, Formula1:="=AND(E1>=$P$1-1,E1<=$P$1+6)"
.FormatConditions(1).Interior.Color = 255
End With

答案 1 :(得分:0)

如果您不想,您甚至不必使用条件格式。您可以使用for循环遍历E列中的所有值。以此为例。

Dim TotalERows As Long
Dim EValue As Long
Dim LowerBound As Long
Dim UpperBound As Long
LowerBound = Worksheets("Sheet1").Range("P1").Value - 2
UpperBound = Worksheets("Sheet1").Range("P1").Value + 7
TotalERows = Worksheets("Sheet1").Range("E" & Rows.Count).End(xlUp).Row
For I = 1 To TotalERows
    EValue = Range("E" & I).Value
        If LowerBound < EValue And EValue < UpperBound Then
            Range("E" & I).Interior.ColorIndex = 3
        End If
Next I