gpt4 book ai didi

vba - Excel VBA - 工作日和/或 datediff 函数无法正常工作

转载 作者:行者123 更新时间:2023-12-04 21:54:20 24 4
gpt4 key购买 nike

我有下面的代码,它应该解析带有日期/时间的列,并建议(通过突出显示)该值是否早于当天上午 6:30 的 24 小时前。如果这一天是星期一,则应该回顾 72 小时(因为星期六和星期日不是工作日),并告知该值是否早于上午 6:30 的 72 小时。

有什么不对劲,因为它没有突出显示超出 24 小时阈值的值,但我不知道它是什么。

'Highlight breached tickets
Dim updateRange As Range, updateCell As Range
Set updateRange = Range("D2:D" & lastRow)
If Weekday(Date, vbMonday) Then
For Each updateCell In updateRange
If DateDiff("h", CDate(updateCell.Value), CDate(Format(Now(), "mm/dd/yy")) + TimeSerial(6, 30, 0)) > 72 Then
updateCell.Interior.Color = 13311
updateCell.Offset(0, -3).Interior.Color = 13311
End If
Next updateCell
Else
For Each updateCell In updateRange
If DateDiff("h", CDate(updateCell.Value), CDate(Format(Now(), "mm/dd/yy")) + TimeSerial(6, 30, 0)) > 24 Then
updateCell.Interior.Color = 13311
updateCell.Offset(0, -3).Interior.Color = 13311
End If
Next updateCell
End If

最佳答案

正如其他人所说,您需要测试Weekday反对某事,因为它不返回 Boolean值(value)。但是,我想我会添加这个,因为您可以重新编写代码,这样您就不会重复自己,因为几乎所有代码都在做完全相同的事情

'Highlight breached tickets
Dim updateRange As Range, updateCell As Range
Dim TimeDiff As Long
Set updateRange = Range("D2:D" & Lastrow)

TimeDiff = IIf(Weekday(Date, vbMonday) = 1, 72, 40)

For Each updateCell In updateRange
If DateDiff("h", CDate(updateCell.Value), CDate(Format(Now(), "mm/dd/yy")) + TimeSerial(6, 30, 0)) > TimeDiff Then
updateCell.Interior.Color = 13311
updateCell.Offset(0, -3).Interior.Color = 13311
End If
Next updateCell

以这种方式编写它可以更容易维护

评论后更新
要修改它以适应其他日子,最简单(也是最容易阅读)的方法是更改​​ TimeDiff =行并使用 Select Case设置值的语句
'Highlight breached tickets
Dim updateRange As Range, updateCell As Range
Dim TimeDiff As Long
Set updateRange = Range("D2:D" & Lastrow)

Select Case Weekday(Date, vbMonday)
' Monday
Case 1
TimeDiff = 72
' Tuesday
Case 2
TimeDiff = 96
' Any other day
Case Else
TimeDiff = 40
End Select

For Each updateCell In updateRange
If DateDiff("h", CDate(updateCell.Value), CDate(Format(Now(), "mm/dd/yy")) + TimeSerial(6, 30, 0)) > TimeDiff Then
updateCell.Interior.Color = 13311
updateCell.Offset(0, -3).Interior.Color = 13311
End If
Next updateCell

关于vba - Excel VBA - 工作日和/或 datediff 函数无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47714474/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com