如果大于今天,请突出显示单元问题

时间:2018-11-16 19:15:15

标签: excel vba excel-vba

我正在尝试建立一个简单的解决方案,以突出显示日期大于当前日期的单元格。我目前拥有的东西如下:

Sub Test()
  Dim lrow As Long
  lrow = Cells(Rows.Count, 1).End(xlUp).Row
  Columns("H:H").EntireColumn.AutoFit
  If Range("H2:H" & lrow).Value > Date Then Cell.Interior.Color = vbYellow
End Sub

我一直收到“类型不匹配”错误,但是列(H)的格式设置为日期,因此我不确定自己在做什么错。任何帮助或指示将不胜感激。

4 个答案:

答案 0 :(得分:5)

Range("H2:H" & lrow).Value将是2D数组(如果涉及多个单元格,则Value的{​​{1}}始终是2D数组);您收到类型不匹配错误,因为您无法将2D数组与Range进行比较;如果您不能使用conditional formatting,则需要比较各个数组下标。

最后要做的是迭代每个单元格(否则,下一个问题将是“如何使此循环运行得更快?”)。将该数组放入Date中,并对该数组进行迭代-由于它只有1列,因此请使用Variant使其成为一维数组:

Application.Transpose

这样,您只有在拥有 时才能点击工作表。

答案 1 :(得分:2)

使用条件格式!顾名思义,这就是为此而构建的!

Microsoft blog post on date conditional formating

enter image description here

答案 2 :(得分:2)

为响应@MatthieuGuindon对@CharlesPL的回答的建议,下面是一些执行条件格式的代码。我已经对其进行了设置,以使其突出显示在您将其运行为亮黄色之后的日期。

Option Explicit

Sub setCondFormat()
Dim lrow As Long

lrow = ActiveSheet.Range("H" & ActiveSheet.Rows.Count).End(xlUp).Row
With Range("H2:H" & lrow)
    .FormatConditions.Delete
    .FormatConditions.Add Type:=xlExpression, Formula1:= _
    "=H2>TODAY()"
    With .FormatConditions(.FormatConditions.Count)
        .SetFirstPriority
        With .Interior
            .PatternColorIndex = xlAutomatic
            .Color = 65535
            .TintAndShade = 0
        End With
    End With
End With

End Sub

答案 3 :(得分:1)

我建议在单元格范围内进行迭代并分别测试每个单元格。请参见下面。

Resources#getResourceEntryName()