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

Posted

技术标签:

【中文标题】在 Ms Access 中的特定时间范围内的特定日期运行宏【英文标题】:Running a macro a specific day at a specific time range in Ms Access 【发布时间】:2015-05-13 17:13:26 【问题描述】:

我在一个模块中有我的 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】:

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

我的解决方案如下所示:

我将有一个包含一个字段的表,即 Boolean 类型的“ExectureProcedure”,并且只有一行,因此该表如下所示:
 ========================
| 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的情况下才会运行,只有在日期不满足你的条件时才能设置,所以应用程序会在下次运行时运行它。

我希望这个解决方案很清楚,因为我没有时间编写实际的 VBA 代码,但从我的脑海中,您将需要使用这些函数:WeekdayDLookup。如果你有困难,请在 cmets 中发布。

【讨论】:

以上是关于在 Ms Access 中的特定时间范围内的特定日期运行宏的主要内容,如果未能解决你的问题,请参考以下文章

ms-access:仅显示特定日期内记录的报告

选择日期范围内的特定日期

带有空格和范围的 MS Access VBA acImport 工作表名称

MS Access:从日期时间值返回特定日期的查询

MS Access:突出显示 MS Access 报告中的特定字段

将特定数据从 csv 文件导入 MS Access