如果单元格日期值介于现在和24小时之间,则触发。 (Cdate.value)

时间:2016-03-08 16:33:56

标签: excel vba excel-vba date

我正在使用Excel 2010并编写需要执行某些操作的VBA脚本,如果值为Cell,则介于现在和24小时之间。我查看过几十个主题,但找不到有效方法。

以下是您需要了解的一些事项。

脚本在公式范围中查找值(截止日期):

Set FormulaRange = ThisWorkbook.Worksheets("Tasks").Range("F5:F35")
On Error GoTo EndMacro:
For Each FormulaCell In FormulaRange.Cells
    With FormulaCell

假设F5具有以下值:

  

3/9/2016 9:50:00 AM

如果F5:F35范围内的值等于现在或24小时,我会尝试要求它执行“MyMsg = SentMsg”。

以下是我尝试过的一些方法,并且没有成功。

1。不起作用,因为它不考虑小时和分钟。如果日期是明天,它会触发,但我需要它来检查24小时,而不是+1天)。:

If DateValue(CDate(.Value)) >= Date And DateValue(CDate(.Value)) <= (Date + 1) Then

2. 然后我尝试向下舍入()到最后一分钟(并在一整天内添加1440分钟),因为脚本每分钟自动运行以检查触发日期: / p>

If DateValue(CDate(.Value)) >= Date And DateValue(CDate(.Value)) <= ((Round(Now * 1440, 0) +1440) / 1440) Then

2。即使超过24小时也不会触发,但如果超过30小时则不会触发? (这让我很困惑)。这可能是因为我使用&gt; = Date?我需要确保它在今天上午0:00到现在+24小时之间发送提醒。

3。我也尝试使用以下内容,但结果与数字2相同:

If DateValue(CDate(.Value)) >= Date And DateValue(CDate(.Value)) <= (Now + TimeSerial(24, 0, 0)) Then

我是否过度思考这个?是否有更简单,更简单的方法,如果没有。我做错了什么?

我相信其中一个问题是我不能在Now和Now +之间使用。因为如果脚本超过了Now(),脚本将删除触发器,因此它必须是一般日期,现在是+时间。

任何帮助将不胜感激,我完全被困在那里。

谢谢, Francis M。

1 个答案:

答案 0 :(得分:2)

在Excel VBA中,有两种方法可以将24小时添加到当前DateTime(即Now);下面的代码片段演示了这些函数的使用,还包括基于单元格中的日期值&#34; A3&#34;的条件的样本IF检查。在Now和(Now + 24小时)之间:

Sub Add24h()
    ' one possible solution to add 24 hrs
    Range("A1").Value = Now + TimeSerial(24, 0, 0)

    ' another possible solution to add 24 hrs
    Range("A2") = DateAdd("h", 24, Now)

    'sample logical statement to check if the value is in between two of dates
    If (Range("A3") >= Now And Range("A3") <= (Now + TimeSerial(24, 0, 0))) Then
    ' place you code here
    End If

End Sub

使用Excel工作表功能可以实现相同的功能,如下所示:

=IF(AND(A3>=NOW(),A3<=NOW()+1),TRUE,FALSE)

希望这可能会有所帮助。