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
相关产品推荐
相关产品推荐

