如何在午夜运行的vba上编程定时器?

时间:2014-12-04 21:53:35

标签: excel vba excel-vba timer

我正在为VBA编写一个进程,我正在使用一个基本的计时器。

dim t as single

T=timer 
(code...)
Range("A1") = Timer - t & " secs"

我的计时器应该可以在午夜后继续运行。但是我已经读到计时器在24:00休息。是否可以设置一个不受午夜通道影响的计时器?

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

如果你想做时差,你可以做这样的事情。你需要什么分辨率?如果你使用日期变量,我相信你对第二个变量很好。

Sub test()

Dim startdatetime As Date

startdatetime = Now()

' wait 7 seconds (or whatever your code does...)

Application.Wait (Now + 0.00008)

Debug.Print Format(Now() - startdatetime, "s.000")

End Sub

答案 1 :(得分:0)

你需要日期和时间

将函数设置为在午夜运行,包含以下变量:

Dim StartDate As Long
Dim StartTime As Double

Dim CurrentDate As Long Dim CurrentTime As Double

Dim dblStartDateTime As Double Dim dblCurrentDateTime As Double Dim dblElapsedDateTime As Double

StartDate = Date StartTime = VBA.Timer

dblStartDateTime = StartDate + (StartTime / 24 / 3600)

你会注意到dblStartDateTime看起来很像你从VBA.Now()返回的正常DateTime - 但是它得到了VBA.Timer()函数intead的精确度舍入到秒VBA.DateTime功能。

您的代码可能类似于检查某些事件(文件夹中出现的文件?)的循环,或者当数据从冗长的计算中返回时为真的函数:

For i = 1 To 16777216

    Sleep 10     ' boolAAAAAGGGHHHH = HasGreatCthulhuEmergedFromTheDeep()     ' If boolAAAAAGGGHHHH = True Then Exit For     ' Next i

所以你现在需要做的就是在循环中插入一段类似的代码,检查当前的日期和时间,并计算经过的时间间隔:

    CurrentDate = Date     CurrentTime = VBA.Timer

    dblCurrentDateTime = CurrentDate + (CurrentTime / 24 / 3600)

    dblElapsedDateTime = dblCurrentDateTime - dblStartDateTime

    If dblElapsedDateTime > dblTimeout Then         ' Err.Raise -1951535091, "XL Doomwatch App", "Mere mortals shall live another day"         Exit For         End If

......这是一个非常晚的答案,但这是一个相当普遍的问题。