[英]How to copy-paste from DOS application to Excel using SendKeys?
我正在嘗試模擬此操作:
並在單元格中具有該值。
它是DOS窗口樣式的應用程序,因此擊鍵是管理它的唯一方法。
我設法激活並在DOS風格的應用程序中輸入了ENTER之類的擊鍵,但是當我嘗試按ctrl + C時 ,看不到它有任何作用。
我嘗試使用以下方法在Excel VBA中對其進行仿真:
Range("E7").Select
SendKeys "^c"
Range("G7").Select
SendKeys "^v"
E7值不會被復制,但是G7(粘貼目標)會突出顯示,就像選擇復制一樣。
注意:我不是試圖將內容從Excel復制到Excel,而是要使用Excel執行擊鍵。
我今天遇到了同樣的問題。
我通過將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"
我遇到了同樣的問題-我開發了代碼,並且可以在我的計算機上使用-SendKeys“ ^ v” ...但在其他用戶的計算機上卻無法使用! 我正在嘗試一切...延遲,欣賞,從Excel訪問accessig,讓用戶檢查各種設置,selection.paste ...不好。 最后,我注意到了不同的語法...我們使用的是相同的Office版本,但是我不確定Windows。 但是我輸入了6種不同的語法,如果失敗了,則跳過它。...帶有大寫字母v的SendKeys,括在squigley括號中,squigley中的每個組件都用加號分隔,等等。 其中2個命令將^ V放在Outlook主體中...我刪除了這2個命令,我很高興。
問題在於復制和粘貼需要一些時間,而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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.