我正在为VBA编写一个进程,我正在使用一个基本的计时器。
dim t as single
T=timer
(code...)
Range("A1") = Timer - t & " secs"
我的计时器应该可以在午夜后继续运行。但是我已经读到计时器在24:00休息。是否可以设置一个不受午夜通道影响的计时器?
感谢您的帮助!
答案 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 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()函数intead的精确度舍入到秒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
......这是一个非常晚的答案,但这是一个相当普遍的问题。