计算没有假期和周末的工作日数

Calculate Number of Working Days without Holidays & Weekends

如果不计算周六、周日和节假日,如何计算两个日期之间的工作天数。

我有一个包含以下字段的 table: enter image description here

我有以下 table,我想要的是在名为 expr1 的列中计算工作日的差异。

将代码输入到Visual Basic中,调用workingdays模块

enter image description here

用每列的名称替换变量。

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

然后他们告诉我在使用生成器的查询中调用函数 Workingdays,但它没有给我结果。

enter image description here enter image description here

我接受并 运行 查询,但出现错误。

正如 Tony 在评论中建议的那样,您首先需要构建一个包含假期日期的 table,因为这些日期每年都不同。

那么,与其使用 DateDiff 之类的函数,最简单的方法可能是递增地计算两个日期之间的天数,如果日期是星期六或星期日,则不增加计数器,或者您假期的成员 table,例如:

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 的 table,其中包含一个名为 Holiday 的字段,其中排除了所有假期日期。

上述函数计算包含两个提供日期的工作日数。

例如,假设您的 Holidays table 包含以下日期:

然后该函数将return以下内容:

?WorkingDays(#2018-12-24#, #2019-01-04#)
 7 

要使用代码,打开VBAIDE(Alt+F11),插入一个new Module (Alt, I, M) 然后将代码粘贴到模块中并保存模块。

然后您可以从表达式生成器可用的任何地方调用该函数。