使用日期比较的条件格式

Conditional Formatting using Date Comparison

我正在尝试在 VBA 中创建一个条件格式规则,它只会更改当前日期的单元格背景颜色。我有一列今年的日期。我也在使用 Office Excel 2010.

oSheet.Range(Cells(iStartRow, 1), Cells(iLastRow, 1)).FormatConditions.Add xlCellValue, xlEqual, "=" & Cells.Address & "=" & Date

我正在尝试识别当前单元格的地址,以便将其与今天的日期进行比较。请记住,将根据不同日期的列检查此公式。

我可以很容易地在 Excel 中创建条件格式,但我正在尝试在 VBA 代码中重新创建此语句。

当我为 Excel 中出现的日期创建必要的条件格式,然后查看 VBA 中的公式时;这是结果: =FLOOR(A32,1)=TODAY()

以下内容将满足您的需求:

oSheet.Range(Cells(iStartRow, 1), Cells(iLastRow, 1)).FormatConditions.Add Type:=xlExpression, Formula1:="=$A" & iStartRow & "=TODAY()"

如果您想引用特定单元格进行日期比较,请使用(例如 C1):

oSheet.Range(Cells(iStartRow, 1), Cells(iLastRow, 1)).FormatConditions.Add Type:=xlExpression, Formula1:="=$A" & iStartRow & "=$C"

请注意,在这两个示例中,A 之前都有一个 $,因为它是固定列,但行之前没有 $,因为行 (iStartRow) 需要可变。

我不知道该 CF 规则的代码如何适合周围的代码,但您最好将 .Range 的范围明确定义为属于同一个父工作表。

with oSheet
    .Range(.Cells(iStartRow, 1), .Cells(iLastRow, 1)).FormatConditions.Add Type:=xlExpression, Formula1:="=$A" & iStartRow & "=TODAY()"
end with

前缀句点(例如 句号 或 .)告诉 .Range(....Cells(... 他们属于 oSheet。没有它们,您的代码可能会工作,也可能不会。最近有几个案例,一个简单的父错误定义(通过依赖 ActiveSheet)破坏了其他好的代码。