我对这个软件比较陌生,真的可以用手了。我正在使用Ditta在剪贴板上存储多个项目并为它们提供了一个快捷方式。使用此脚本,我试图使用快捷键一次粘贴所有复制的项目。我已经单独测试了每个代码块,但它确实有效。但是当我尝试一起运行它时,它只运行最后一个块。有谁知道为什么会这样?
Sub Data()
ActiveCell.Select
SendKeys "^4", True
Application.Wait (2000)
ActiveCell.Offset(0, 1).Range("A1").Select
SendKeys "^3", True
Application.Wait (1000)
ActiveCell.Offset(0, 1).Range("A1").Select
SendKeys "^2", True
Application.Wait (1000)
ActiveCell.Offset(0, 1).Range("A1").Select
SendKeys "^1", True
Application.Wait (1000)
End Sub
答案 0 :(得分:1)
我不知道问题的确切位置,但似乎只是等待Ditto插入值。您的代码只是等到粘贴完成后才等待。
我写了一个解决方法:
我们现在有一个循环,从4到1向后计数(这是发送4个密钥。这比使用相同代码的4倍更容易。
主要思想是在粘贴之前清除单元格,在粘贴之后我们等待单元格不再为空,这意味着粘贴成功。请注意,这只是一种解决方法,需要等待一段时间才能完成粘贴。
Option Explicit
Public Sub InsertData()
Dim i As Long
For i = 4 To 1 Step -1 'loop from 4 to 1 backwards
ActiveCell.Clear 'clear active cell (so we know it is empty for sure)
SendKeys "^" & CStr(i), True 'send keys for paste
'wait until active cell isn't empty anymore.
'this means wait until paste is done
Do While IsEmpty(ActiveCell)
DoEvents 'give Excel some time to handle other events
Loop
'move over to the next cell
ActiveCell.Offset(0, 1).Select
Next i
End Sub
只需记下原始代码
无论如何,你的等待是错的Application.Wait(2000)
并不是你所期望的。正确的方法是:
Application.Wait(Now + TimeValue("0:00:02"))
让它等待2秒。给定时间不是等待时间的金额,而是宏等待的绝对时间。有关详情,请参阅Application.Wait Method。