问题是复制和粘贴需要一些时间,而 VBA 并没有等待它。
首先,您需要指定发送密钥方法的第二个参数,即“等待”。将其设置为真。因此,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