我有一个Microsoft Access数据库,要求用户输入Date Opened:
值。输入后,将触发另一个字段中的计算Deadline (25 WD):
。这可以通过后面的字段中的以下功能来实现:
=DateAdd("d",25,[Date opened])
但是,我要算的是从输入的日期起算25个工作日Date Opened:
。我有一张表holidays
,其中包含到2020年的英国假期列表。
我如何才能合并为两个(可以这么说),以产生Deadline (25 WD):
不计算其中列出的任何日期的有效值holidays
?
例如,如果输入的日期是2015年1月1日,则该功能将从2015年1月1日起算25个工作日,这意味着它将排除该期间内的所有周末和任何银行假日以及得出的日期值在外地Deadline (25 WD)
也将是一个工作日(即不是周末或银行假期)。
您可能需要一个UDF来帮助您解决此问题。就像是,
Function addWorkDays(addNumber As Long, Date2 As Date) As Date
'********************
'Code Courtesy of
' Paul Eugin
'********************
Dim finalDate As Date
Dim i As Long, tmpDate As Date
tmpDate = Date2
i = 1
Do While i <= addNumber
If Weekday(tmpDate) <> 1 And Weekday(tmpDate) <> 7 And _
DCount("*", "tbl_BankHolidays", "bankDate = " & Format(tmpDate, "\#mm\/dd\/yyyy\#")) = 0 Then i = i + 1
tmpDate = DateAdd("d", 1, tmpDate)
Loop
Do While Weekday(tmpDate) = 1 Or Weekday(tmpDate) = 7 Or _
DCount("*", "tbl_BankHolidays", "bankDate = " & Format(tmpDate, "\#mm\/dd\/yyyy\#")) <> 0
tmpDate = DateAdd("d", 1, tmpDate)
Loop
addWorkDays = tmpDate
End Function
因此,当您在日期中添加25天时,它将跳过表-中存储的所有周末和银行假日tbl_BankHolidays
。
? addWorkDays(25, Date())
25/06/2015
希望这可以帮助 !
编辑:我添加了另一个循环,以查看结束日期是在银行假日还是周末,如果这样做,它将再增加一天直到达到工作日。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句