簡體   English   中英

Excel VBA-如果時間大於24小時,則突出顯示單元格

[英]Excel VBA - Highlight cell if time is greater than 24 hours ago

我有一份報告,該報告通常每天早上7點之后運行,但有時可能會在一天的晚些時候運行。 在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

希望這有道理

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

簡而言之:

如果在ticketUpdateTime和今天的凌晨07: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")或您需要的任何范圍

請注意,這里沒有錯誤檢查/處理或數據驗證-您必須自己做。 ;-)

您可以使用dateserial(年作為整數,月作為整數,天作為整數)和TimeSerial(小時作為整數,分鍾作為整數,秒作為整數)。 我不知道您的票證更新時間到底是什么樣子,因此很難編寫表達式。 但是,前一天上午7點將是:

dateserial(year(date-1), month(date-1), day(date-1)) & " " &timeserial(7, 0, 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM