2014-12-04 80 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

...這是一個很晚的答案,但這是一個相當普遍的問題。