Vba建于一年的假期功能?

时间:2015-05-27 15:39:05

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

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

  • 我自动填充myDate表以获取不是a的每个星期一 STAT-假期。
  • 在每次打开数据库时使用自动执行重新填充所有内容之前,我会从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

1 个答案:

答案 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] 通过丢弃所有内容然后从头开始添加所有星期一。这将是不必要的工作,并且会毫无理由地使数据库膨胀。