Function 简化多应用程序。在VBA中等待

Function 简化多应用程序。在VBA中等待,function,vba,variables,wait,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

我一直在研究我的问题的答案。我是个新手,虽然我学得很快

我想这样做:

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

两者都不起作用。我希望简化编码,使其外观更清晰,更易于阅读。提前感谢您的帮助

使用Application.Wait to Wait 1秒是非常不可靠的,因为它的时间分辨率只有1秒左右。这是除了原始代码的语法错误之外(如您所意识到的)

对于短延迟,请使用内核32中的睡眠:

像这样使用它:

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

Sub mySub()
    Sleep 500 'pauses execution for at least 500 milliseconds
End Sub
因此,使用上述方法可以获得更简单、更可靠的睡眠:)

编辑:正如您所意识到的,您不需要在sub内部定义函数,而是在sub外部定义函数-如:

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

你不能在VBA中嵌套方法-move
WaitSec
name
之外哦,天哪,很抱歉这里的格式不好,我试过了,出于某种原因,它只粘贴上一列“Declare Sub Sleep Lib”kernel32(ByVal dwms)Sub waitOne()中的值Sleep 500'暂停执行至少500毫秒End Sub NavTest()waitOne()End Sub',这与应用程序的问题无关。等等,但无论如何-我认为SendKeys不能用于与其他应用程序交互。您需要使用shell—它有点复杂。我建议您将问题的这一部分(如何将密钥发送到不同的应用程序)作为一个单独的问题发布,然后您应该得到与该问题相关的响应。我不担心SendKeys,我的重点是创建变量或函数来执行特定的等待/休眠操作。比方说,我想做“等待秒(5)”来做5秒。那么问题是什么?与“粘贴上一列中的值”有关的内容与如何等待/睡眠无关;)。你不需要一个sub,简单的调用
Sleep x
,其中x是你想要等待的毫秒数。例如,对于5秒钟的睡眠呼叫
sleep 5000
不应粘贴到下一列。它应该粘贴到另一个应用程序中。直到我尝试了这些建议,这个问题才出现。我试着发表评论,看看他们是否是问题所在,但问题仍然存在。我稍后会回来报告,看看是否能让它再次工作。无论如何,谢谢你,一旦我解决了这个问题,我会在测试代码中尝试“Sleep”(睡眠)