VBA代码用于在特定时间结束宏。

3
我一直在寻找方法,试图找到一种只能强制宏在下午1:15停止运行的方法。我找到了可以在特定时间关闭工作簿的内容,但是没有找到仅保持工作簿打开并且停止宏的方式。我相信这与Application.OnTime "13:15:00"功能有关,但我不确定如何让它在下午1:15停止宏。
以下是使我的Excel工作簿保持运行所需的内容: 首先,当我打开工作簿时,它开始运行:
Private Sub Workbook_Open()
    If Time > TimeSerial(6, 45, 0) Then
    Call TimeStamp
    Else
    Application.Wait "06:45:00"
    Call TimeStamp
End Sub

那将会启动每15分钟运行一次的 TimeStamp 宏,使用这些全局变量和编码:
Option Explicit
Public RunWhen As Double
Public Const cRunIntervalSeconds = 900 ' 15 minutes
Public Const cRunWhat = "TimeStamp"  ' the name of the procedure to run

Sub StartTimer()
    RunWhen = Now + TimeSerial(0, 0, cRunIntervalSeconds)
    Application.OnTime EarliestTime:=RunWhen, Procedure:=cRunWhat, _
        Schedule:=True

在这部分之后是我的 TimeStamp Macro,它以以下内容结束:Call StartTimer,以安排下一次运行时间为当前时间之后 15 分钟。

尝试使用 Application.OnTime TimeValue("13:15:00"), "MyMacro" 进行调试。 - moffeltje
1
你需要一个新的全局变量(布尔值),并将初始函数设置为仅在此新变量为True时执行。现在创建名为“StopMacro1()”的新函数,将全局变量更改为False。使用Application.OnTime在下午1:15调用此新函数。 - paul bica
宏是如何运行的?展示你现有的代码(或至少相关部分)可能会有所帮助。 - Tim Williams
@TimWilliams 刚刚添加了那一部分。 - THAT newbie
@Paulbica,等我有时间的时候让我试一下,然后我会告诉你结果如何。 - THAT newbie
Time < TimeSerial(13,15,0) 在下午1:15之前为真。 - Tim Williams
1个回答

1

一旦时间超过下午1:15,这将停止安排下一次运行。

If Time < TimeSerial(13,15,0) Then

    RunWhen = Now + TimeSerial(0, 0, cRunIntervalSeconds)
    Application.OnTime EarliestTime:=RunWhen, Procedure:=cRunWhat, _
        Schedule:=True

End If

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接