Vba 内置一年中假期的功能?

Vba built in function for holidays during a year?

所以基本上我有两个 table。一个日期 table 和一个 statHoliday table。 statholiday table 拥有您在这个国家可以找到的所有假期,这很好。

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 JOINing [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] 丢弃其中的所有内容,然后从头开始添加所有星期一。那将是不必要的工作,并且会无缘无故地使数据库膨胀。