在Ms Access中的特定时间范围内运行特定日期的宏

时间:2015-05-13 17:13:26

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

我在模块中有我的VBA功能。我从宏调用我的函数。我在 autoexec 宏中有它。因此,每次打开我的数据库时,它都会运行该功能。到目前为止,这很有效。

现在我试图让功能在星期一早上在特定时间范围内运行 ,例如:周一早上8点至中午12:00,不是每天数据库需要仅在星期一更新 ..我找不到办法。我的功能代码如下:

Public Function DownloadFromS()
    On Error GoTo DownloadErrorHandler

    Dim stDocName As String
    stDocName = "getThemFromS"
    DoCmd.RunMacro stDocName
Exit_DownloadS:
    Exit Function
DownloadErrorHandler:
    MsgBox "Sorry Sto is offline, re-establish our connection"
    Resume Exit_DownloadS
End Function

我对VBA来说相当新,所以有点难以理解它......

1 个答案:

答案 0 :(得分:0)

您需要使用Weekday()函数和时间检查其工作日的当前日期,正如@HansUP建议的那样。关键部分是确保程序只运行一次,而不是每次打开应用程序。所以你需要做的是确保应用程序知道你以前是否已经运行它。

我的解决方案如下:

  • 我会有一个有一个字段的表,即' ExectureProcedure'类型Boolean并且只有一行,因此表格如下所示:
 ========================
| ID | ProcedureExecuted |
|====|===================| 
| 1  |      False        |
 ========================
  • 每次运行检查条件以及时间和工作日符合您的条件时,您将此表中的值设置为False,否则您将其保留。
  • 仅在过程完成后将值设置为True

伪代码,仅供参考:

If [ExecuteConditionsOK] = True AND [ProcedureExecuted] = False Then
   Run your procedure
   Set [ProcedureExecuted] to True
Elseif [ExecuteConditionsOK] = False Then
   Set [ProcedureExecuted] to False
End if

简而言之,只有当ProcedureExecuted标志为false时才会运行该过程,该标志只能在日期不符合您的条件时设置,因此应用程序将在下次运行时运行。< / p>

我希望这个解决方案很明确,因为我没有时间编写实际的VBA代码,但是从我的头脑中,你需要使用这些函数:Weekday,{{1 }}。如果您感到挣扎,请在评论中发布。