Vba 内置一年中假期的功能?
Vba built in function for holidays during a year?
所以基本上我有两个 table。一个日期 table 和一个 statHoliday table。 statholiday table 拥有您在这个国家可以找到的所有假期,这很好。
- 我自动填充 myDate table 以获得每个星期一,这不是
统计假期。
- 在每次打开数据库时使用自动执行重新填充所有内容之前,我删除了 myDate table 中的所有内容。
- 虽然它工作正常,但我正在寻找一种更有效的方法来做到这一点。我认为从 table 中删除所有内容,并且多年来进行更新需要时间。
- vba是否有针对节假日的内置功能?
mydate table 看起来像这样:
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
不,没有内置的 VBA 节假日功能。您必须使用自定义方法来处理您的组织选择的假期。
在您当前的方法中,您丢弃 [date-table] 的内容,然后使用非假期的星期一的日期重新加载它。
我认为在 [date-table] 中保留 all 星期一日期应该更简单查询哪个returns只有非节假日的星期一。您可以通过 LEFT JOIN
ing [date-table] 到 statHolidaysTbl 并仅询问那些候选行来完成此操作右侧(假期日期)为 Null。
另存为 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)。但是不要 "freshen" [date-table] 丢弃其中的所有内容,然后从头开始添加所有星期一。那将是不必要的工作,并且会无缘无故地使数据库膨胀。
所以基本上我有两个 table。一个日期 table 和一个 statHoliday table。 statholiday table 拥有您在这个国家可以找到的所有假期,这很好。
- 我自动填充 myDate table 以获得每个星期一,这不是 统计假期。
- 在每次打开数据库时使用自动执行重新填充所有内容之前,我删除了 myDate table 中的所有内容。
- 虽然它工作正常,但我正在寻找一种更有效的方法来做到这一点。我认为从 table 中删除所有内容,并且多年来进行更新需要时间。
- vba是否有针对节假日的内置功能?
mydate table 看起来像这样:
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
不,没有内置的 VBA 节假日功能。您必须使用自定义方法来处理您的组织选择的假期。
在您当前的方法中,您丢弃 [date-table] 的内容,然后使用非假期的星期一的日期重新加载它。
我认为在 [date-table] 中保留 all 星期一日期应该更简单查询哪个returns只有非节假日的星期一。您可以通过 LEFT JOIN
ing [date-table] 到 statHolidaysTbl 并仅询问那些候选行来完成此操作右侧(假期日期)为 Null。
另存为 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)。但是不要 "freshen" [date-table] 丢弃其中的所有内容,然后从头开始添加所有星期一。那将是不必要的工作,并且会无缘无故地使数据库膨胀。