Excel VBA – 如何忽略条件格式中的空白单元格

我想突出显示date比今天的dateless的单元格。 但是,在应用条件格式时,将突出显示“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 

您可以使用SpecialCells()types。 第一行是我改变的。

 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 

不过,你也应该避免使用.Select 。 我将离开如何为读者做一个练习。

只是另外一点:

如果有任何date是由公式生成的,则解决scheme不起作用。

如果要突出显示date常量和date公式,则需要返回原始select(或者通过指定范围来执行相同的操作):

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

…并用这样的东西replace条件格式:

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

(我并不擅长条件格式化,所以当我引用范围中的第一个单元格时,我不太明白为什么它会起作用,但是当我testing它时,它确实是这样做的。)