【问题标题】:Vba built in function for holidays during a year?一年中假期的Vba内置功能?
【发布时间】:2015-08-09 19:29:17
【问题描述】:

所以基本上我有两张桌子。日期表和 statHoliday 表。 statholiday 表就像您在这个国家可以找到的所有假期一样,这很好。

  • 我自动填充 myDate 表以获取每个星期一,这不是 stat-holiday。
  • 我从 myDate 表中删除所有内容,然后在每次打开数据库时使用自动执行重新填充所有内容。
  • 虽然它工作正常,但我正在寻找一种更有效的方法来执行此操作。我认为从表中删除所有内容并多年来更新需要时间。
  • vba 中是否有针对假期的内置函数?

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

【问题讨论】:

  • 如果您的代码按预期工作,并且您正在寻找更好、更清洁和/或更有效的编码方式,您可能会对Code Review 感兴趣:)
  • 您不需要每次都重新加载date-table。使用查询LEFT JOIN 日期表到假期表。然后你想要的星期一在查询行中statHolidaysTbl.Date Is Null

标签: sql ms-access vba ms-access-2003


【解决方案1】:

不,假期没有内置的 VBA 函数。您必须使用定制的方法来处理您的组织选择的假期。

在您当前的方法中,您丢弃了 [date-table] 的内容,然后用不是假期的星期一的日期重新加载它。

我认为在 [date-table] 中保留 all 星期一日期并使用仅返回非假日星期一的查询应该更简单。您可以通过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 更新)。但是不要通过丢弃其中的所有内容然后从头开始添加所有星期一来“刷新”[date-table]。那将是不必要的工作,并且会无缘无故地使数据库膨胀。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-04
    • 2021-12-30
    • 1970-01-01
    • 1970-01-01
    • 2017-11-29
    • 2015-03-16
    • 2016-01-11
    • 1970-01-01
    相关资源
    最近更新 更多