2014-12-04 85 views
-2

我正在编写VBA上的一个进程,为此我使用了一个基本的计时器。如何在vba上运行超过午夜的计时器?

dim t as single 

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

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

谢谢你的帮助!

回答

0

如果你想做一个时差,你可以做这样的事情。你需要什么决议?如果你使用Date变量,我相信你对第二个变量很好。

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 
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()函数的精度,它是四舍五入的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

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