所以基本上我有两张桌子。日期表和statHoliday表。 statholiday表就像你在这个国家所有的假期一样好。
mydate表看起来像这样:
the_date
---------
08-01-2015
15-01-2015
22-01-2015
29-01-2015
//stat-holiday table
name | Date
---------------------
New Year | 01-01-2015
Christmas| 25-12-2015
我的功能如下:
Function dateTblUpdate()
DoCmd.SetWarnings False
Dim dt As Date
Dim rs As DAO.Recordset
Dim db As DAO.Database
Set db = CurrentDb
Dim sqlS As String
sqlS = "Select Date as holi from statHolidaysTbl"
Set rs = db.OpenRecordset(sqlS)
DoCmd.RunSQL "DELETE FROM [date-table]"
For dt = #1/1/2010# To DateSerial(Year(Now), Month(Now), Day(Now))
If Weekday(dt) = 2 Then
Do While Not rs.EOF
If rs!holi <> dt Then
DoCmd.RunSQL "Insert into [date-table] (the_date) values(#" & dt & "#)"
End If
rs.MoveNext
Loop
rs.MoveFirst
End If
Next
DoCmd.SetWarnings True
End Function
答案 0 :(得分:0)
不,假日没有内置的VBA功能。您必须使用自定义方法来处理您组织的所选假期。
在您当前的方法中,您丢弃 [date-table] 的内容,然后使用非假日的星期一重新加载它。
我认为将所有星期一日期留在 [date-table] 中应该更简单,并使用仅返回非假日星期一的查询。您可以通过LEFT JOIN
[date-table] 到 statHolidaysTbl 来完成该操作,并且仅询问右侧(假日日期)为空的候选行
将其另存为 qryMondays :
SELECT d.the_date
FROM
[date-table] AS d
LEFT JOIN statHolidaysTbl AS h
ON d.the_date = h.Date
WHERE h.Date Is Null;
然后,无论您以前使用 [date-table] ,请使用 qryMondays 。
当您需要将更多最近的星期一日期添加到 [date-table] 时,只需添加它们即可。查询将自动排除星期一假期(假设您还保持 statHolidaysTbl 更新)。但不要&#34;清新&#34; [date-table] 通过丢弃所有内容然后从头开始添加所有星期一。这将是不必要的工作,并且会毫无理由地使数据库膨胀。