使用日期比较的条件格式
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)破坏了其他好的代码。
我正在尝试在 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)破坏了其他好的代码。