Excel VBA - 如果时间超过24小时,则突出显示单元格

时间:2017-11-03 12:15:09

标签: excel vba excel-vba

我的报告通常会在每天早上7点之后运行,但有时可能会在白天晚些时候运行。在col D中是票证更新时间/日期。如果昨天更新了机票,那么单元格应该保持不变;如果昨天没有更新机票(IE,如果今天是第3个,并且自1日X点起尚未更新),则单元格应突出显示。由于报告偶尔会在当天晚些时候才开始运行,因此我无法做一个简单的CurrentTime - 24小时就可以解决这个问题。我需要该功能始终查找前一天和早上7点之前。

在不知道如何编码的情况下,我知道它应该是这样的:

If ticketUpdateTime < currentDay at 0700 - 24
Then highlight (I know the code for this part already)
End If

希望这是有道理的

3 个答案:

答案 0 :(得分:1)

If DateDiff("h", CDate(ticketUpdateTime), CDate(Format(Now(), "mm/dd/yy")) + TimeSerial(7, 0, 0)) > 24 Then
    highlight
End If

用简单的英语:

如果从ticketUpdateTime到今天上午7:00之间的时间超过24小时,请突出显示

原始问题的范围有点过了,但这里的使用示例也是如此:

Sub CheckTimes(rng As String)
    Dim someRange As Range, someCell As Range
    Set someRange = Range(rng) ' Convert input string to an actual range object

    For Each someCell In someRange
        If DateDiff("h", CDate(someCell.Value), CDate(Format(Now(), "dd/mm/yy")) + TimeSerial(7, 0, 0)) > 24 Then
            Debug.Print "Highlight"
        End If
    Next cell
End Sub

要调用它,请输入Call CheckTimes("D2:D100")或您需要的任何范围

请注意,此处没有错误检查/处理或数据验证 - 您必须自己完成此操作。 ; - )

答案 1 :(得分:0)

您可以使用dateserial(Year as integer,month作为Integer,day作为Integer)和TimeSerial(Hour as Integer,Minute as Integer,Second as Integer)。我不知道您的ticketUpdateTime究竟是什么样的,所以很难写出表达式。但是,前一天早上7点是:

{{1}}

答案 2 :(得分:0)

似乎是一个问题。所有的日期/时间都是昨天,除了D2中的值是11/01/2017 10:47:02,并且该值没有突出显示。

Call CheckTimes("D2:D" & lastRow)

    Sub CheckTimes(rng As String)
    Dim someRange As Range, someCell As Range
    Set someRange = Range(rng) ' Convert input string to an actual range object

    For Each someCell In someRange
        If DateDiff("h", CDate(someCell.Value), CDate(Format(Now(), "dd/mm/yy")) + TimeSerial(7, 0, 0)) > 24 Then
            someCell.Interior.Color = 16750899
        End If
    Next someCell
End Sub
相关问题