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

Running a macro a specific day at a specific time range in Ms Access

我的 VBA 函数在一个模块中。我从宏中调用我的函数。我在 autoexec 宏中有它。所以每次打开我的数据库时,它 运行 就是这个函数。到目前为止效果很好。

现在我正在尝试在特定时间范围内的星期一早上使函数 运行 ,例如:星期一上午 8 点 - 12:00PM ,不是每天因为数据库需要更新只在星期一..我找不到办法做到这一点。我的功能代码如下:

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 还很陌生,所以很难理解它...

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

我的解决方案如下所示:

  • 我会有一个带有一个字段的 table,即 Boolean 类型的 'ExectureProcedure' 并且只有一行,所以 table 看起来像这样:
 ========================
| ID | ProcedureExecuted |
|====|===================| 
| 1  |      False        |
 ========================
  • 每次您 运行 检查条件并且时间和工作日 满足您的条件时,您将此 table 中的值设置为 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标志为假,程序只会运行,只有当日期不符合您的条件时才能设置,所以应用程序会运行 下次什么时候会。

我希望这个解决方案很清楚,因为我没有时间编写实际的 VBA 代码,但从我的头脑来看,您将需要使用这些功能:Weekday , DLookup。如果您有困难,post 请在评论中提出。