1

我一直在努力解决这个问题,也许我已经接近了。我在 Access 中有一些代码需要在一天中的特定时间运行。我不想使用 Windows 任务计划程序。

所以我有这个功能:

Public Function RunProgram()
Dim RunDateFormat As String

RunDateFormat = Format(Now(), "HH:MM:SS")
    If RunDateFormat = ("15:30:00") Then

'Call these codes and other stuff in here

End If

然后我创建一个名为 Macro1 的宏来调用该函数,On Timer 表单调用该宏,如下所示。

在此处输入图像描述

问题是如果我将间隔设置为;例如:1000,我每秒收到一封电子邮件,程序继续运行。

请帮助:我需要设置它,以便代码在准确的时间运行,但只运行一次。

4

3 回答 3

2

您如何使用静态日期变量:

static dateRan as date
if dateRan = Date then exit Function
If RunDateFormat = ("15:30:00") Then
dateRan = date
'Call these codes and other stuff in here
End If

通过这种方式,您可以让它在一夜之间运行,并且假设没有发生错误以停止操作,它将在第二天工作。

我相信您知道,通过 Access 执行计划任务需要表单启动并运行,因此您有相当大的机会无法运行对时间敏感的任务。如果可行,我真的建议使用任务调度程序。

正如 HelloW 所暗示的那样,除非代码在正确的时间运行至关重要,否则我不会每秒钟都进行检查。如果它很关键,您可能需要进行一些检查并以编程方式修改 timerinterval。

像这样:

If Hour(Now) < 14 or Hour(Now) >= 16 then
    me.TimerInterval = 3600000
else
    me.TimerInterval = 30000
end if

您可以将其范围缩小,越接近运行时间敏感代码所需的时间,检查就越频繁地运行。

于 2012-12-12T21:12:45.147 回答
1

在表单的计时器事件过程中进行时间检查。

Private Sub Form_Timer()
    If TimeValue(Now()) >= #15:30:00# Then
        ' run your job, then turn off the timer
        Me.TimerInterval = 0
    End If
End Sub

基于上述代码的方法应该允许您避免在每次进行时间检查时发送电子邮件。

如果您的不是单用户应用程序,这种情况可能会更复杂。如果 2 位或更多用户在下午 3:30 打开表单,他们是否都应该尝试运行该作业?他们可以吗?OTOH,如果工作是特定于用户的,那可能就是您想要的。

于 2012-12-12T21:17:27.043 回答
0

更改Format(Now(), "HH:MM:00")Format(Now(), "HH:MM:SS") 这将为您提供您似乎正在寻找的秒数。作为最佳实践,我认为每秒运行一次并不是一个好主意。也许每分钟或一刻钟然后进行测试。

于 2012-12-12T21:11:57.480 回答