2017-07-17 139 views
0

由於我剛剛發現了Excel宏,我想嘗試模擬移動對象。我想在我的項目的每個「框架」上運行一些循環代碼。我可以在Excel VBA中無限循環使用此代碼:在Excel VBA中創建毫秒循環

Do While True: 
    'code 
Loop 

然而,這種崩潰的Excel。有沒有一種方法,使運行每十毫秒左右的無限循環,這樣的事情:

Dim timer as Timer 
If timer = 10 Then 
    'code 
    timer = 0 
End If 

編輯:你的回答都非常好,但不正是我要找的。我希望能夠同時運行其他代碼;有點像Javascript's

setInterval(function(){}, 200); 

它可以同時運行多個功能。

+1

你想創建一個無限循環? FYI將「鎖定」Excel,您將無法執行其他任何操作。我認爲即使將一個循環分開10毫秒也最終會使程序崩潰。你試圖完成的更廣泛的目標是什麼? – BruceWayne

回答

0

您的原始方法會導致Excel崩潰,因爲它正在創建一個無退出條件的無限循環。

第二種方法不起作用,因爲你的系統時鐘時間(由Timer給出)將永遠不會10,如果你使用debug.Print(Timer)在您的直接窗口,你會看到它的價值。

下面是一些基於定時器執行某些操作的註釋代碼。請請確保你保留退出while循環的runtime條件,無限循環是惡魔,你真的應該在這裏有一些其他退出代碼!

Sub timeloop() 
    Dim start As Double: start = Timer  ' Use Timer to get current time 
    Dim t As Double: t = start    ' Set current time "t" equal to start 
    Dim interval As Double: interval = 1 ' Interval for loop update (seconds) 
    Dim nIntervals As Long: nIntervals = 0 ' Number of intervals passed 

    ' Use this While loop to avoid an infinite duration! Only runs for "runtime" seconds 
    Dim runtime As Double: runtime = 10 
    Do While t < start + runtime 
     ' Check if a full interval has passed 
     If (t - start)/interval > nIntervals Then 
      nIntervals = nIntervals + 1 
      ' Do stuff here --- 
      Debug.Print (t) 
      ' ----------------- 
     End If 
     t = Timer ' Update current time 
    Loop 
End Sub 
+0

計時器不會*'獲取當前時間'*;它檢索午夜後的秒數(以毫秒爲單位)。必須注意的是,如果您在修正間隔限制的時間間隔內過午夜。例如23:59:55是86,395。十秒鐘後(第二天00:00:05)計時器報告爲5. – Jeeped

+0

因此它會*得到當前時間[從午夜開始] * ...感謝您的澄清,如果OP需要解決該情況,則重置當't'變爲零時使用'start'和'nIntervals',或使用[另一個時間函數](https://www.tutorialspoint.com/vba/vba_date_time.htm) – Wolfie