Vba 仅粘贴列中的最后一段代码

Vba 仅粘贴列中的最后一段代码,vba,excel,Vba,Excel,我对这个软件比较陌生,真的需要一只手。我使用Ditta将多个项目存储在剪贴板上,并为它们提供了快捷方式。使用这个脚本,我试图让它使用快捷键一次粘贴所有复制的项目。我已经分别测试了每一段代码,它可以正常工作。但当我尝试一起运行时,它只运行最后一个块。有人知道为什么会这样吗 Sub Data() ActiveCell.Select SendKeys "^4", True Application.Wait (2000) ActiveCell.Offset(0, 1).

我对这个软件比较陌生,真的需要一只手。我使用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

我不知道问题到底出在哪里,但似乎都是等待同上插入值。您的代码只是不等待粘贴完成

我为此写了一个变通方法:

  • 我们现在有一个循环,从4到1倒计时(这是发送4个键。这比使用4倍相同的代码更容易)

  • 其主要思想是在粘贴前清除单元格,粘贴后等待单元格不再为空,这意味着粘贴成功。请注意,这只是等待粘贴完成一段时间的变通方法



  • 只需对原始代码进行注释

    无论如何,您的等待是错误的
    应用程序。等待(2000)
    并不是您所期望的。正确的方法是:

    Application.Wait(Now + TimeValue("0:00:02"))
    

    使其等待2秒。给定的时间不是等待的时间量,而是宏等待的绝对时间。有关详细信息,请参阅。

    是否确实要在一行中选择完全相同的内容3次?不,理想情况下,我希望它在一列中发布每一条数据。例如Name=A1,Email=B1ect@Peh,我错过了偏移量eded Range(“A1”)把我甩了。@JoeDavison在每一行
    之后尝试一个
    DoEvents
    。或者如果在每一行
    SendKeys
    之后都不起作用。也许你甚至可以省略这些
    Wait
    行。正如我之前所说的
    ActiveCell.Offset(0,1).选择
    应该足够了。这很好,我已经清楚地看到它工作了好几次,它确实只粘贴了前一两个。为什么会这样be@JoeDavison当同上中的4个粘贴槽中有一个为空时,可能会出现这种情况。然后此解决方案将不起作用。是否总是使用相同的数据执行此操作?是否有4个粘贴槽中填充了data(非空)在Ditto中?还要确保在代码运行时不要单击任何位置。您能告诉我它是否可以在Ditto中4个插槽内的任何数据集上复制,还是偶尔会在相同的4个数据集上复制?我正在从web复制多个数据点,理想情况下希望我能够更快地将其移动到excel。要回答您的问题,请回答“是”很多地方都有人填写,而且都包含不同的数据。你能想出更快更有效的方法吗?
    Application.Wait(Now + TimeValue("0:00:02"))