2013-03-07 92 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假定它是美國格式。您可以使用引號代替。

相關問題