傻傻的复制粘贴SendKeys问题

时间:2013-03-07 22:15:56

标签: vba sendkeys

我正在尝试模拟简单的操作:

激活另一个应用程序,发送按键ctrl + c,返回excel,发送按键ctrl + v 并在单元格中具有该值。它是一个DOS窗口样式的应用程序,因此按键是管理它的唯一方法。

我设法激活并在这个DOS风格的应用程序中输入按键(如ENTER),但是当我尝试 ctrl + C 时,它看不到任何事情。< / p>

我尝试使用我使用的代码在excel中模拟它:

Range("E7").Select
SendKeys "^c"
Range("G7").Select
SendKeys "^v"

不会复制E7值,但会突出显示G7(粘贴目标),就像选择复制一样。

P.S。我不会尝试将excel中的东西复制到excel,而只是使用excel成功执行击键。

3 个答案:

答案 0 :(得分:2)

我今天遇到了同样的问题。

我在将CTRL-C发送到应用程序之后等了一会儿解决了这个问题。如果您立即执行另一个脚本行,似乎没有复制任何内容。

SendKeys "^c"
WScript.Sleep 100 ' wait a bit after CTRL+C (otherwise nothing is copied)

事实上,当切换到另一个应用程序并发送CTRL + V时,似乎也会发生同样的问题。 再一次,我等了一会儿解决了它:

AppActivate "Microsoft Excel"
WScript.Sleep 100 ' wait a bit after making window active
SendKeys "^v"

答案 1 :(得分:0)

我遇到了同样的问题-我开发了代码,并且可以在我的计算机上使用-SendKeys“ ^ v” ...但在其他用户的计算机上却无法使用!我正在尝试一切...延迟,欣赏,从Excel访问accessig,让用户检查各种设置,selection.paste ...不好。最后,我注意到了不同的语法...我们使用的是相同的Office版本,但是我不确定Windows。但是我输入了6种不同的语法,如果失败了,则跳过它。...带有大写字母v的SendKeys,括在squigley括号中,squigley中的每个组件都用加号分隔,等等。其中的2条命令将^ V放在Outlook主体中...我删除了这2条命令,我很高兴。

答案 2 :(得分:0)

问题在于复制和粘贴需要一些时间,而VBA没有等待它。

首先,您需要指定发送键方法的第二个参数,即“等待”。将其设置为true。因此,VBA执行一直在等待,直到发送密钥完成。

第二,您需要等待直到将数据复制到剪贴板的过程完成。 sendkeys中的“等待”不是这样做的,因为这与VBA发送密钥无关,而与Windows使用剪贴板有关。为此,请使用我的函数IsCopyingCompleted。

最终的外观如下:

deployment-X.ready