2013-03-07 65 views
1

我修改了此访问功能,因此我可以计算出工作日数量的结束日期。将工作日添加到开始日期以创建结束日期(包括银行假期)

但是我需要能够考虑英国银行假期以及。

有人有什么好主意我怎么能做到这一点?

Public Function CountDays(startDate As Date, NoOfDays As Integer) As Date 
' Function to count no of working days 
Dim tmpNo As Integer 
Dim tmpDate As Date 
Dim tmpStartDate As Date 
Dim i As Integer 

tmpNo = NoOfDays 

tmpStartDate = startDate 

tmpDate = startDate 

i = 0 

Do Until i = NoOfDays 

If Weekday(tmpDate) = 1 Or Weekday(tmpDate) = 7 Then 
tmpNo = tmpNo + 1 
Else 
i = i + 1 
End If 
tmpDate = tmpDate + 1 
Loop 

CountDays = DateAdd("d", tmpNo, tmpStartDate) 
End Function 

欢呼

罗斯

回答

0

由于英国银行假日每年不同,你需要创建一个表来存储这些日期,然后选中该表在你的代码,并增加你的tmpNo如果日期存在,则为值。

变化通过添加额外的“否则如果”条款如下代码:

Do Until i = NoOfDays 
    If Weekday(tmpDate) = 1 Or Weekday(tmpDate) = 7 Then 
     tmpNo = tmpNo + 1 
    Else If DCount("*","tblExceptionDates","dtmDate = #" & tmpDate & "#") > 0 Then 
     tmpNo = tmpNo + 1 
    Else 
     i = i + 1 
    End If 
    tmpDate = tmpDate + 1 
Loop 
+0

此外,您可能需要稍微修改日期标准,因为有时英国和美国的日期会混淆。为了安全起见,我通常会使用''dtmDate = DateValue(“”“&Format(tmpDate,”dd/mm/yyyy“)&”“”)“''而不是''dtmDate =#”&tmpDate&“#” '如果我遇到问题。 – RichardC 2013-03-07 13:57:19

2

通过每天无需循环。稍微计算一下,可以得到工作日的数量,然后在该时间框架中查找假期的数量。所以:

TotalDays = DateDiff("d", startDate, endDate) + 1 

TotalWeekends = (DateDiff("ww", startDate, endDate) * 2) + _ 
((DatePart("w", startDate) = vbSunday) *-1) + _ 
((DatePart("w", endDate) = vbSaturday) *-1) 

TotalHolidays = DCount("*","tblHolidays","Holiday Between #" & startdate & "# And #" & enddate & "#") 

TotalWorkingDays = TotalDays - TotalWeekends - TotalHolidays 

顺便说一下,如果您在日期周围使用#,Access假定它是美国格式。您可以使用引号代替。

相关问题