【发布时间】:2015-02-03 05:48:37
【问题描述】:
我正在尝试在 Excel VBA 代码中插入暂停。以下代码生成编译错误:“Invalid Qualifier”。
函数 Pause() 试图将 Application.Wait 方法与 DoEvents 结合起来,以获得两全其美的效果; Excel 将继续处理击键和鼠标点击,而不会在等待时占用 CPU 资源。
背景:
http://www.fmsinc.com/microsoftaccess/modules/examples/avoiddoevents.asp http://www.cpearson.com/excel/WaitFunctions.aspx
http://vbadud.blogspot.com/2008/03/sleep-function-in-excel-vba.html
Public Declare Function GetTickCount Lib "kernel32" () As Long
' A DoEvents loop uses CPU power.
' Application.Wait suspends all keyboard and mouse actions.
' This function is a hybrid to combine the best of both worlds.
Public Sub Pause(Optional Timeout As Single = 5)
Dim EndTime
EndTime = GetEndTick(Timeout)
Do While GetTickCount() <= EndTime
DoEvents
Application.Wait DateAdd("s", 0.1, Now)
Loop
End Sub
' Timeout is in seconds.
Function GetEndTick(Timeout)
GetEndTick = GetTickCount() + Timeout * 1000
End Function
【问题讨论】:
-
您的代码完全按照发布的方式对我运行。您在哪里运行它 - 在 Excel 中?
-
这很奇怪。我打开了另一个 Excel 实例并复制了代码,它工作正常。但它在原版中不起作用。当我单击“运行”、“编译...”时,我收到错误消息。我什至尝试重新启动 Excel,但没有帮助。这很令人费解。
-
我尝试了 Application 对象的其他方法和属性,例如
Application.CalculateFull,编译时出现同样的错误。 -
您是否声明了一个名为 Application 的变量或模块?
-
就是这样!有一个 Enum 变量类型,其中“应用程序”作为选项之一。删除它解决了问题。