2017-08-04 39 views
0

我正在嘗試創建一個函數來將n個工作日添加到日期。這顯然需要考慮週末和假期。週末部分工作正常,但我用表格列出所有的假期,我無法讓我的查詢拉精確的recordCount。它堅持計數總是零。這裏是我的代碼:當記錄存在時訪問VBA recordCount返回0

Public Function dateAddNoWeekends(dt1 As Date, genDate As Integer) 
Dim i As Integer 
Dim date1 As Date 
Dim date2 As Date 
Dim holidays As Boolean 
Dim isWeekday As Boolean 
Dim dayOfWeek As Integer 
Dim numDays As Integer 
Dim db As Database 
Dim rs As DAO.Recordset 
Dim sql As String 
Set db = CurrentDb 
date1 = dt1 
date2 = date1 
i = 0 
numDays = genDate 

sql = "SELECT * FROM Holidays WHERE holidayDate = " & date2 
Set rs = db.OpenRecordset(sql) 

Debug.Print date2 

Do While i < numDays 
    If Not isWeekday Then date2 = date2 + 1 
    dayOfWeek = Weekday(date2) 

    If rs.RecordCount > 0 Then 
     Debug.Print rs.RecordCount 
     holidays = True 
    Else 
     holidays = False 
     Debug.Print rs.RecordCount 
    End If 

    If dayOfWeek > 1 And dayOfWeek < 7 And holidays = False Then 
     If i < numDays - 1 Then date2 = (date2 + 1) 
      isWeekday = True 
      i = i + 1 
     Else: isWeekday = False 
     End If 
Loop 

rs.Close 
Debug.Print date2 
+0

也許是日期格式的問題?嘗試使用「2017-12-25」等常數日期進行測試。 – Stefan

+0

是否這樣? sql =「SELECT * FROM Holidays WHERE holidayDate ='7/1/2017'」這會導致數據類型不匹配。 – Eleyna

+0

'Set rs = db.OpenRecordset(sql)'add'rs.MoveLast'後面。也可能''SELECT * FROM Holidays WHERE holidayDate =「&CLNG(date2)'。我討厭在Access中的日期。 :) –

回答

0

爲了解決這個問題,我宣佈在循環頂部的變量(所以它會每次更新正確),並分配一個DCOUNT函數從date2的數到DATE2。

相關問題