我正在编写VBA上的一个进程,为此我使用了一个基本的计时器。如何在vba上运行超过午夜的计时器?
dim t as single
T=timer
(code...)
Range("A1") = Timer - t & " secs"
我的计时器应该能够在午夜后继续运行。不过,我已经读过,计时器在24:00休息。是否可以设置一个不受午夜时间影响的计时器?
谢谢你的帮助!
我正在编写VBA上的一个进程,为此我使用了一个基本的计时器。如何在vba上运行超过午夜的计时器?
dim t as single
T=timer
(code...)
Range("A1") = Timer - t & " secs"
我的计时器应该能够在午夜后继续运行。不过,我已经读过,计时器在24:00休息。是否可以设置一个不受午夜时间影响的计时器?
谢谢你的帮助!
如果你想做一个时差,你可以做这样的事情。你需要什么决议?如果你使用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
你会需要的日期以及设置功能时
跨午夜运行,用这些变量:
Dim StartDate As Long Dim StartTime As DoubleDim 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 16777216Sleep 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
...这是一个很晚的答案,但这是一个相当普遍的问题。