我有一个需要运行一段代码,每120秒。 我在寻找一种简单的方式在VBA来做到这一点。 我知道,这将有可能获得来自定时器值Auto_Open
事件,以防止不必使用一个神奇的数字,但我不能完全得到怎样把火关计时器得到的东西每120秒运行。
我真的不希望使用一个无限循环与睡眠,如果我能避免它。
编辑 :
根据所提供的答案交叉张贴在: Excel的VBA Application.OnTime。 我认为它是一个坏主意,使用这种想法......无论哪种方式?
我有一个需要运行一段代码,每120秒。 我在寻找一种简单的方式在VBA来做到这一点。 我知道,这将有可能获得来自定时器值Auto_Open
事件,以防止不必使用一个神奇的数字,但我不能完全得到怎样把火关计时器得到的东西每120秒运行。
我真的不希望使用一个无限循环与睡眠,如果我能避免它。
编辑 :
根据所提供的答案交叉张贴在: Excel的VBA Application.OnTime。 我认为它是一个坏主意,使用这种想法......无论哪种方式?
当工作簿第一次打开,执行以下代码:
alertTime = Now + TimeValue("00:02:00")
Application.OnTime alertTime, "EventMacro"
然后,只需在被称为“EventMacro”工作簿,将重复的宏。
Public Sub EventMacro()
'... Execute your actions here'
alertTime = Now + TimeValue("00:02:00")
Application.OnTime alertTime, "EventMacro"
End Sub
是的,你可以使用Application.OnTime
对于这一点,然后把它放在一个循环。 这有点像在那里你保持hittig当你想让它再响打盹按钮闹钟。 每三秒钟的时间下列更新单元格A1。
Dim TimerActive As Boolean
Sub StartTimer()
Start_Timer
End Sub
Private Sub Start_Timer()
TimerActive = True
Application.OnTime Now() + TimeValue("00:00:03"), "Timer"
End Sub
Private Sub Stop_Timer()
TimerActive = False
End Sub
Private Sub Timer()
If TimerActive Then
ActiveSheet.Cells(1, 1).Value = Time
Application.OnTime Now() + TimeValue("00:00:03"), "Timer"
End If
End Sub
你可以把StartTimer
过程中您Auto_Open
事件并改变什么是在做Timer
proceedure(现在它只是更新与A1的时间ActiveSheet.Cells(1, 1).Value = Time
)。
注意 :您想要的代码(除StartTimer
模块中),而不是一个工作表模块。 如果工作表模块中有它的代码需要稍作修改。
在工作簿事件:
Private Sub Workbook_Open()
RunEveryTwoMinutes
End Sub
在一个模块:
Sub RunEveryTwoMinutes()
//Add code here for whatever you want to happen
Application.OnTime Now + TimeValue("00:02:00"), "RunEveryTwoMinutes"
End Sub
如果你只想要第一块代码的工作簿后执行打开,然后只需加2分钟的延迟到Workbook_Open
事件
(这是从MS查看帮助文件转述。我敢肯定,XL有类似的东西。)基本上,TimerInterval是窗体级属性。 一旦设置,使用子Form_Timer开展您的预期作用。
Sub Form_Load()
Me.TimerInterval = 1000 '1000 = 1 second
End Sub
Sub Form_Timer()
'Do Stuff
End Sub
我发现,使用OnTime
可以是痛苦的,尤其是当:
本文将通过芯片皮尔逊是很有启发。 我更喜欢使用Windows定时器现在,而不是OnTime
。
我的解决方案:
Option Explicit
Public datHora As Date
Function Cronometro(action As Integer) As Integer
'This return the seconds between two >calls
Cronometro = 0
If action = 1 Then 'Start
datHora = Now
End If
If action = 2 Then 'Time until that moment
Cronometro = DateDiff("s", datHora, Now)
End If
End Function
如何使用? 简单...
dummy= Cronometro(1) ' This starts the timer
seconds= Cronometro(2) ' This returns the seconds between the first call and this one