宏在特定时间开始

时间:2015-07-13 20:27:23

标签: excel vba excel-vba

我找到了使用

的消息来源
Application.OnTime TimeValue("18:00:00"), "MyMacro"

但我似乎无法让它发挥作用。这就是我输入的内容

Sub TimeStamp()
'
' TimeStamp Macro
'
' Keyboard Shortcut: Ctrl+Shift+T
'
  Application.OnTime TimeValue("13:25:00"), "TimeStamp"

' Following refreshes the data
    Application.CalculateFullRebuild

然后其余代码后跟End Sub

出于任何未知原因,当我启动宏时,它不会等到给定时间。我在这里打破了什么语法规则?

3 个答案:

答案 0 :(得分:3)

触发宏时会触发宏。 OnTime安排它自动运行,但为什么这会阻止您手动运行它?把它想象成病毒扫描。许多人将他们的计算机配置为在某些设定时间进行自动扫描,但完全能够随时运行非计划扫描。如果你想确保你的宏在一定时间之前没有任何效果,使用if - then语句包含Now(如果它太早退出sub) - 虽然它根本不运行它更有意义当你不想要的时候。

答案 1 :(得分:1)

我成功使用多年的另一种方法是创建一个计划调用宏的小vb脚本。我对另一个非常相似的问题的另一个答案显示了这个示例脚本

Dim xlApp
Dim xlWkb
Set xlApp = CreateObject("excel.application")
Set xlWkb = xlApp.Workbooks.Open("PATH TO YOUR FILE")
xlApp.Visible = True
xlWkb.RunAutoMacros 1 'enables macros to be run on open
xlApp.Run ("YOUR PROCEDURE")
xlApp.Workbooks("YOUR WORKBOOK NAME").Save 'Save the workbook
xlApp.Quit 'quits excel

通过任务计划程序安排此计划。我的另一个答案可以找到here

答案 2 :(得分:0)

这要归功于你们中的几个人的帮助。我用过:

Private Sub Workbook_Open()
Application.Wait "6:45:00"
Call TimeStamp
End Sub

并将其放在" ThisWorkbook"中。这使得当我打开我的工作簿时,宏会自动启动,但它会等到下午3:03才能执行剩下的任务。

接下来,我需要每15分钟刷新一次,因此我使用了User:Findwindow建议的Chip's解决方案。代码如下

Public RunWhen As Double
Public Const cRunIntervalSeconds = 900 ' 15 minutes
Public Const cRunWhat = "TimeStamp"  ' the name of the procedure to run

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

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

在TimeStamp宏的末尾,我放置Call StartTimer,以便每次运行宏时,计时器将从当前时间开始计划新的运行时间15分钟。 If Time < TimeSerial(13, 15, 0) Then允许宏在下午1:15停止运行,这是我希望它停止的时间。