只在列中粘贴最后一段代码

我对这个软件比较陌生,可以真的用一只手。 我正在使用Ditta在剪贴板上存储多个项目,并给他们一个快捷方式。 有了这个脚本,我试图用快捷键一次性粘贴所有复制的项目。 我已经testing了每个代码块,它的工作原理。 但是当我尝试一起运行时,它只运行最后的块。 有谁知道为什么会发生这种情况?

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 

我不知道这个问题究竟在哪里,但似乎是等待Ditto插入值。 你的代码只是等待粘贴完成。

我为此写了一个解决方法:

  1. 现在我们有一个循环,从4到1倒数(这是发送4个键,这比4次使用相同的代码要容易一些。

  2. 我们的主要想法是在粘贴之前清除细胞,在粘贴之后,等待细胞不再空,这意味着粘贴成功。 请注意,这只是一个解决方法,需要等待一段时间,直到粘贴完成。


 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秒钟。 给定的时间不是等待的时间,而是macros观等待的绝对时间 。 有关更多信息,请参阅Application.Wait方法 。