我正在编写代码以确保系统的数据日期不迟于2个月的商业月末日期。例如,如果系统的作业运行日期为23/12/2015,则有效数据日期为2015年10月30日和2015年11月30日。涉及的日期仅为工作日。
我的代码如下:
keyword
但是,我不知道如何找到:
任何帮助将不胜感激。谢谢!
答案 0 :(得分:3)
要查找当月的最后一天,您可以找到下个月的第一天并减去一天:
Dim last As Date
Dim current As Date
current = Now
last = DateSerial(Year(current), Month(current), 1) - 1
Debug.Print last
要获得一个月的最后一个工作日,只需减去工作日的天数即可:
Do While Weekday(last, vbMonday) > 5
last = last - 1
Loop
Debug.Print last
将两个想法结合起来并将其作为一个函数提取,可以实现这一点:
Private Sub Example()
Debug.Print LastBizDayOfMonth(Year(Now), Month(Now) - 1)
Debug.Print LastBizDayOfMonth(Year(Now), Month(Now) - 2)
End Sub
Private Function LastBizDayOfMonth(inYear As Integer, inMonth As Integer) As Date
LastBizDayOfMonth = DateSerial(inYear, inMonth + 1, 1) - 1
Do While Weekday(LastBizDayOfMonth, vbMonday) > 5
LastBizDayOfMonth = LastBizDayOfMonth - 1
Loop
End Function
答案 1 :(得分:2)
以下是如何获得一个月的最后一天:
Sub LastDayOfMonth()
Dim d As Date
mnth = 12
yr = 2015
d = DateSerial(yr, mnth + 1, 0)
MsgBox d
End Sub
然后必须从该日期减去两个月。如果结果是星期六或星期日,您必须决定是要继续前进到下周一还是后退到上周五。