![日期调整为截止后的下一个工作日 vba](https://linux22.com/image/1583487/%E6%97%A5%E6%9C%9F%E8%B0%83%E6%95%B4%E4%B8%BA%E6%88%AA%E6%AD%A2%E5%90%8E%E7%9A%84%E4%B8%8B%E4%B8%80%E4%B8%AA%E5%B7%A5%E4%BD%9C%E6%97%A5%20vba.png)
我有一个问题,我正在尝试创建一个已截止时间的宏。
例如:在工作表上,如果请求者记录了他们的请求,则会自动显示当前日期,但是如果请求者在截止时间之后记录了他的/她的请求,则日期将在下一个工作日(即周一至周五)进行调整,假设我的截止时间是下午 4 点
如果请求者在截止时间之后提交请求,(比如说,星期五,下午 4:01)日期将显示下一个工作日,即星期一。
工作日相当于:星期一到星期五 截止时间为下午4点
这在 VBA 宏上可能吗?
谢谢!
答案1
通过 VBA 宏几乎一切皆有可能。
因此,首先我们需要确定我们是否应该获取今天的日期,还是第二天的日期。
上午/下午让我有点头疼,所以可能有更好的方法来实现这一点。
本质上,如果过了下午 4 点,我们需要转到下一个日期。然后我们必须确保我们不会落在周末,如果落在周末,则找出下一个星期一是什么时候。
您可以尝试这样的事情:
Sub aTime()
Dim cTime As Variant, amPm As Variant, wkDay As Long, d As Date, printA As Range, printB As Range
Set printA = Range("A1") 'Where to display weekday
Set printB = Range("A2") 'Where to display date
d = Date 'Store date
wkDay = Weekday(Now, vbMonday) 'Store weekday, assuming monday as start of week
cTime = Format(TimeValue(Now), "hh:mm:ss AM/PM") 'Store time
amPm = Format(TimeValue(Now), "AM/PM") 'AM/PM stuff
If cTime > "03:59:59" And cTime < "12:00:00" And amPm = "PM" Then 'Are we too late for today?
wkDay = wkDay + 1 'Yes, go to next weekday
d = DateAdd("d", 1, Date) 'Add one day to date too
End If
If wkDay > 5 Then 'Are we past friday?
printA.Value = WeekdayName(1) 'Yes, set weekday to Monday and print
printB.Value = Date + 8 - Weekday(Date, vbMonday) 'Find date of next monday and print
Else
printA.Value = WeekdayName(wkDay) 'No, Print stored weekday
printB.Value = d 'also print stored date
End If
End Sub