Excel VBA - 如何在条件格式中忽略空白单元格

时间:2016-12-19 19:56:57

标签: excel excel-vba vba

我正在尝试突出显示日期少于今天日期的单元格。但是,在应用条件格式时,会突出显示“ALL”空白单元格。我知道指定范围(I2:I200),但报告每天运行,可以包含1到200+。这就是我需要格式化整个列的原因。

Sheets("Sheet1").Columns("I:I").Select
Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlLessEqual, Formula1:="=today()"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Interior
    .PatternColorIndex = xlAutomatic
    .ThemeColor = xlThemeColorAccent2
    .TintAndShade = 0.399945066682943
End With
Selection.FormatConditions(1).StopIfTrue = False

2 个答案:

答案 0 :(得分:2)

还有一点:

如果公式生成任何日期,则解决方案无效。

如果要突出显示日期常量和日期公式,则需要返回原始选择(或通过指定范围执行相同操作):

Sheets("Sheet1").Columns("I:I").Select

...并用以下内容替换条件格式:

Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=if(isblank(i1),false,i1<=today())"

(我不是条件格式的专家,所以当你引用范围中的第一个单元格时,我并不能理解为什么它会起作用,但是当我测试它时它就会这样做。)

答案 1 :(得分:1)

您可以使用SpecialCells()类型。第一行是我改变了。

Sheets("Sheet1").Columns("I:I").SpecialCells(xlCellTypeConstants).Select
Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlLessEqual, Formula1:="=today()"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Interior
    .PatternColorIndex = xlAutomatic
    .ThemeColor = xlThemeColorAccent2
    .TintAndShade = 0.399945066682943
End With
Selection.FormatConditions(1).StopIfTrue = False

但是,您还应该avoid using .Select。我将留下如何做到这一点作为读者的练习。