如何计算两个日期之间的工作天数,而不计算周六,周日和节假日。
我有一个包含以下字段的表格: enter image description here
我有下表,我想要的是在称为expr1的列中计算工作日的差额。
在Visual Basic中输入代码,并在模块中调用工作日
用每列的名称替换变量。
Function WorkingDays(ByVal FECHA_DE_VALIDACION_FA As Date, ByVal FECHA_IMPRESIÓN As Date) As Long
While FECHA_DE_VALIDACION_FA <= FECHA_IMPRESIÓN
Select Case True
Case Weekday(FECHA_DE_VALIDACION_FA, vbMonday) > 5
Case DCount("*", "Holidays", "Holiday = #" & Format(fromDate, "mm/dd/yyyy") & "#") > 0
Case Else: WorkingDays = WorkingDays + 1
End Select
FECHA_DE_VALIDACION_FA = FECHA_DE_VALIDACION_FA + 1
Wend
End Function
然后他们告诉我,在使用生成器的查询中,调用了Workdays函数,但没有得到结果。
enter image description here enter image description here
我接受并运行查询,但出现错误。
答案 0 :(得分:0)
正如Tony在评论中所建议的那样,您首先需要构建一个包含假期日期的表,因为这些日期可能会逐年变化。
然后,最简单的方法可能不是递增使用DateDiff
之类的功能,而是递增地计算两个日期之间的天数,如果日期是星期六或星期日或成员,则不增加计数器假期表中的数据,例如:
Function WorkingDays(ByVal fromDate As Date, ByVal toDate As Date) As Long
While fromDate <= toDate
Select Case True
Case Weekday(fromDate, vbMonday) > 5
Case DCount("*", "Holidays", "Holiday = #" & Format(fromDate, "mm/dd/yyyy") & "#") > 0
Case Else: WorkingDays = WorkingDays + 1
End Select
fromDate = fromDate + 1
Wend
End Function
以上假设您有一个名为Holidays
的表,其中包含一个名为Holiday
的字段,其中要排除所有假期。
上面的函数计算包括两个提供的日期在内的工作日数。
例如,假设您的Holidays
表包含以下日期:
然后该函数将返回以下内容:
?WorkingDays(#2018-12-24#, #2019-01-04#)
7
要使用该代码,请打开VBA IDE( Alt + F11 ),插入新的模块( Alt , I , M ),然后将代码粘贴到模块中并保存该模块。
然后,您可以在表达式生成器可用的任何地方调用该函数。