2017-07-17 103 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