【问题标题】:Conditional Formatting using Date Comparison使用日期比较的条件格式
【发布时间】:2023-03-26 23:48:01
【问题描述】:

我正在尝试在 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()

【问题讨论】:

  • 你应该可以通过以下方式拉出当前单元格:selection.address ...你不能吗?

标签: vba date excel conditional-formatting


【解决方案1】:

以下内容将为您提供您想要的:

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$1"

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

【讨论】:

  • 非常感谢,您的解决方案解决了问题并回答了我的问题。
【解决方案2】:

我不知道 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)破坏了原本不错的代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-05
    • 2018-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-01
    相关资源
    最近更新 更多