You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MS Access中根据起始日期计算并自动取最近工作日截止日期的方法

工作日累加计算实现方案

需求规则

给定起始日期后可灵活自定义累加工作日天数,最终返回的结束日期需符合以下规则:

  • 若计算得到的日期为周六、周日,自动顺延至下一个周一
  • 若计算得到的日期为普通工作日,直接返回原日期
  • 若计算得到的日期为法定节假日,自动顺延至下一个非节假日的工作日

修复后可运行VBA代码

Public Function AddDueDate(StartDate As Date, TotalPeriod As Integer) As Date
    Dim rst As Recordset
    Dim db As Database
    Dim Duedate As Date
    Dim icount As Integer

    On Error GoTo errhandlers:
    Set db = CurrentDb
    Set rst = db.OpenRecordset("tblHolidays", dbOpenSnapshot)
    icount = 0
    Duedate = StartDate

    Do While icount < TotalPeriod
        Duedate = Duedate + 1
        ' 判定是否为周一到周五的工作日
        If Weekday(Duedate, vbMonday) < 6 Then
            ' 匹配节假日表,确认是否为排除的节假日
            rst.FindFirst "[Holidaydate]=#" & Duedate & "#"
            If rst.NoMatch Then
                icount = icount + 1
            End If
        End If
    Loop

    AddDueDate = Duedate

exit_errhandlers:
    If Not rst Is Nothing Then rst.Close
    Set rst = Nothing
    Set db = Nothing
    Exit Function
errhandlers:
    MsgBox Err.Description, vbExclamation
    Resume Next
End Function

使用说明

  • 前置依赖:需要先在当前Access数据库中创建名为tblHolidays的配置表,表内必须包含日期类型字段Holidaydate,提前录入所有需要排除的法定节假日日期
  • 调用方法:直接在VBA代码或者Access查询中调用函数即可,示例:AddDueDate(#2021-11-26#, 1)返回结果为2021-11-29,符合周末顺延规则
  • 优化说明:相较于原始代码,修复了参数名拼写不一致的报错问题,新增了记录集非空判定,避免异常场景下关闭未初始化对象的报错

内容的提问来源于stack exchange,提问作者Make Deprofit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 18:36:03