【问题标题】:Exclude Weekends in Calculation在计算中排除周末
【发布时间】:2019-04-02 14:07:23
【问题描述】:

我已经能够在谷歌上搜索一些可以从计算中删除周末和节假日的代码,我更关心的是删除周末。

下面的代码完美运行,我认为你可以使用 WorkdayDiff(),但由于这是基于 DateAdd(),我认为它会更复杂。

基本上我有一个长度变化的表格,我让它为我计算截止日期,我希望它也能排除周末和节假日,如果它足够简单的话。非常感谢您的帮助!

主要目标:如果星期六和/或星期日包含在这些日期中,则减去额外的 1 或 2 天。

Private Sub Command2_Click()
    DoCmd.SetWarnings False
    DoCmd.OpenQuery "Delete_A", acViewNormal, acEdit
    DoCmd.OpenQuery "Append_A", acViewNormal, acEdit
    DoCmd.OpenQuery "Append_Date", acViewNormal, acEdit

    Dim dbs As DAO.Database
    Dim rst As DAO.Recordset
    Dim dat As Date
    Set dbs = CurrentDb
    Set rst = dbs.OpenRecordset("select * from Table1 order by ID desc")
    With rst
        If Not .EOF Then
            .MoveFirst
            Do Until .EOF
                If Not IsNull(!Due_date) Then
                    dat = !Due_date
                Else
                    dat = DateAdd("d", -!Duration, dat)
                    .Edit
                    !Due_date = dat
                    .Update
                End If
                .MoveNext
            Loop
        End If
        .Close
    End With
    Set rst = Nothing
    Set dbs = Nothing


    DoCmd.OpenQuery "Delete_A_Exp", acViewNormal, acEdit
    DoCmd.OpenQuery "Append_A_Exp", acViewNormal, acEdit
    'DoCmd.RunMacro "A4_Export"
End Sub

【问题讨论】:

  • 如果 !Due_Date 不为空,记录没有任何反应是故意的吗?
  • 是的,我正在填写空白到期日,如果他们在那里,他们应该留下。
  • 减去假期是相当广泛的。如果您有一个假期表或一个单独的函数来测试一天是否是假期,我可以编写一个函数来减去忽略这些天数的天数。什么是假期很大程度上取决于您所在的地区。
  • 是的,我可以建立一个假期表,你能写一个函数来检查这个表而不包括周末吗?

标签: sql vba date ms-access weekday


【解决方案1】:

您可以使用以下函数替换DateAdd,以从日期中增加或减少一定数量的工作日。

Public Function WorkdayAdd(AmountOfDays As Long, InputDate As Date) As Date
    Dim increment As Long
    If AmountOfDays < 0 Then
        Increment = -1
    Else
        Increment = 1
    End If
    Do Until AmountOfDays = 0
         InputDate = InputDate + Increment
         If WeekDay(InputDate) <> vbSunday And WeekDay(InputDate)<> vbSaturday Then
             'Implement check if InputDate is a holiday here
              'If Not IsHoliday(InputDate) Then
                   AmountOfDays = AmountOfDays - Increment
              'End If
         End If
    Loop
    WorkdayAdd = InputDate
End Function

IsHoliday 函数可以很简单,如下所示(假设有一个名为 HolidayTable 的表,其中包含一列 HolidayDate,其中填充了假期)。

Public Function IsHoliday(inputDate As Date) As Boolean
    TempVars!HolidayDate = Int(InputDate) 'No time part
    IsHoliday = DCount("HolidayDate", "HolidayTable", "HolidayDate = TempVars!HolidayDate") <> 0
    TempVars.Remove "HolidayDate"
End Function

【讨论】:

    猜你喜欢
    • 2015-04-01
    • 2017-07-23
    • 2017-10-15
    • 2021-11-09
    • 1970-01-01
    • 2015-08-17
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    相关资源
    最近更新 更多