2015-01-07 49 views
1

我爲一個家庭建造者工作,我試圖幫助一名同事拿出一個公式,可以計算一個3天的日期,但排除週末。如何計算日期但排除微軟訪問中的週末?

DateAdd("d",3,[TrussOrderDate]) 

這是她用的是當前的公式,她一直在尋找讓這個來計算日期,但不包括週末

+0

使用日曆表通常是一個好主意。它可以讓你填寫假日的所有日子,而不僅僅是週末。 – Fionnuala

回答

3

我將創建一個表,將容納所有的(銀行/公共/特別)假期。喜歡的東西(tbl_BankHolidays),

holID | bankDate | bankHoliday  | workDay 
--------+---------------+-------------------+----------- 
1  | 01/01/2014 | New years day | Wednesday 
2  | 18/04/2014 | Good Friday  | Friday 
3  | 21/04/2014 | Easter Monday | Monday 
4  | 05/05/2014 | Early May  | Monday 
5  | 26/05/2014 | Spring holiday | Monday 
6  | 25/08/2014 | Summer holiday | Monday 
7  | 25/12/2014 | Christmas Day | Thursday 
8  | 26/12/2014 | Boxing Day  | Friday 
9  | 01/01/2015 | New Year’s Day | Thursday 
: 
: 
16  | 28/12/2015 | Boxing Day  | Monday 

那麼功能來計算這些日期。

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 = " & CDbl(tmpDate)) = 0 Then i = i + 1 
     tmpDate = DateAdd("d", 1, tmpDate) 
    Loop 

    addWorkDays = tmpDate 

End Function 

當你需要添加ň一個日期,只需使用,類似於DateAdd函數數量。您不指定字符串標識符,因爲它默認只添加幾天。然後第一個參數是要添加的天數。第二個是需要添加日期的日期。

該代碼的工作原理是,一次循環一天,檢查它是否是週末(1 - vbSunday或7 - vbSaturday),或者它是否列在特殊的休息日表中。如果是休息日或週末,可以在不增加櫃檯的情況下增加一天。當計數器等於您通過的數字時,循環將終止!

+0

我認爲在'do'循環中的'if'之前放置'tmpDate = DateAdd(「d」,1,tmpDate)'更準確。 –

相關問題