我已经能够在Google上搜索一些可以从计算中删除周末和假期的代码,我更关心删除周末。
下面的代码运行完美,我认为您可以使用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
答案 0 :(得分:0)
您可以使用以下功能替换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