Application.ontime遵循错误的速度

时间:2018-08-21 08:03:34

标签: vba excel-vba

我正在尝试让单元在屏幕上每0.9秒到0.3秒移动一次。

下面的代码仅在ms> 580时每秒才工作,并且在ms <570时以极高的速度(每0,01s?)工作。

我的速度计算有问题吗?

Option Explicit
Sub Gog()

Dim ra As Range
Dim ms As Long
ms = 580

Set ra = Cells.Find(What:="GO", LookIn:=xlValues, LookAt _
        :=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
        False, SearchFormat:=False)

ra.Offset(-1, 0).Value = "GO"
ra.clearcontents

Application.OnTime (Now + (ms * 0.00000001)), "Gog"

End Sub

1 个答案:

答案 0 :(得分:1)

// for save sharedPrefApi.putList(SharedPrefApi.Key.USER_LIST, userList); // for retrieve List<User> userList = sharedPrefApi.getList(SharedPrefApi.Key.USER_LIST, User.class); 的精度不高。文档(https://docs.microsoft.com/en-us/office/vba/api/Excel.Application.OnTime)指出:

  

EarliestTime的值四舍五入到最接近的秒。

要获得比1秒更高的精度,您可能需要使用Windows计时器,该计时器可以通过以下API调用进行访问:Application.OnTimeSetTimer

这篇SO帖子提供了一些有关如何调用API(包括64位版本)的示例,并说明了需要注意的一些方面:API Timers in VBA - How to make safe