在VBA中简化多个Application.Wait

时间:2014-04-30 18:22:13

标签: function vba variables wait

我已经研究过我的问题的答案。我是一个新手,虽然我起得很快。

我想做这样的事情:

Sub name()
    Dim waitOne As Date (or Variant?)
    waitOne = Application.Wait(Now + TimeValue("00:00:01"))

    Selection.Copy
        waitOne 'second
    Application.SendKeys "%{Tab}", True 'switching to another application
        waitOne 'second
    Application.SendKeys ("^v"), True
End Sub

或者用以下声明替换waitOne

 Sub name()

    Function waitSec()
  waitOne = Application.Wait(Now + TimeValue("00:00:01"))
     End Function

    Selection.Copy
        waitSec() 'second
    Application.SendKeys "%{Tab}", True
        waitSec() 'second
    Application.SendKeys ("^v"), True
End Sub

两者都不起作用。我希望简化编码以获得更清晰的外观并且更易于阅读。提前感谢您的协助!

1 个答案:

答案 0 :(得分:1)

使用Application.Wait等待1秒是非常不可靠的,因为它的时间分辨率本身只有1秒左右。这是对原始代码语法中的错误的补充(如您所知)。

对于短延迟,请使用kernel32中的Sleep:

使用它像:

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub mySub()
    Sleep 500 'pauses execution for at least 500 milliseconds
End Sub

所以,使用上面的内容来实现更简单,更可靠的睡眠:)

编辑:只是让你意识到,你没有在sub中定义一个函数,你在外面执行它 - 比如:

Sub mySub()
    MsgBox myFunc()
End Sub
Function myFunc()
    myFunc = "Hello!"
End Function