如何使用SendKeys从DOS应用程序复制粘贴到Excel?

问题描述 投票:2回答:3

我正在尝试模拟此操作:

  • 激活另一个应用程序,
  • 发送按键Ctrl + c,
  • 返回Excel,
  • 发送按键Ctrl + v

并且在单元格中具有该值。

这是DOS窗口样式的应用程序,因此,击键是管理它的唯一方法。

我设法激活并在DOS风格的应用程序中输入了ENTER之类的击键,但是当我尝试ctrl + C时,它什么也没看到。

我尝试使用以下方法在Excel VBA中对其进行仿真:

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

没有复制E7值,但是突出显示了G7(粘贴目的地),就好像它被选择复制一样。

注意:我不是试图将内容从Excel复制到Excel,而是使用Excel执行击键。

excel vba sendkeys
3个回答
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"

0
投票

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


0
投票

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

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

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

这是final的外观:

SendKeys "^a", True 'Select all
SendKeys "^c", True 'Copy
Do
    DoEvents
Loop Until Me.IsCopyingCompleted()
YourSheet.Paste

Function IsCopyingCompleted() As Boolean
'Check if copying data to clipboard is completed

    Dim tempString As String
    Dim myData As DataObject

    'Try to put data from clipboard to string to check if operations on clipboard are completed
    On Error Resume Next
    Set myData = New DataObject
    myData.GetFromClipboard
    tempString = myData.GetText(1)
    If Err.Number = 0 Then
        IsCopyingCompleted = True
    Else
        IsCopyingCompleted = False
    End If
    On Error GoTo 0

End Function
© www.soinside.com 2019 - 2024. All rights reserved.