仅在

时间:2017-08-31 11:55:52

标签: excel vba excel-vba

我对这个软件比较陌生,真的可以用手了。我正在使用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

1 个答案:

答案 0 :(得分:1)

我不知道问题的确切位置,但似乎只是等待Ditto插入值。您的代码只是等到粘贴完成后才等待。

我写了一个解决方法:

  1. 我们现在有一个循环,从4到1向后计数(这是发送4个密钥。这比使用相同代码的4倍更容易。

  2. 主要思想是在粘贴之前清除单元格,在粘贴之后我们等待单元格不再为空,这意味着粘贴成功。请注意,这只是一种解决方法,需要等待一段时间才能完成粘贴。

  3. 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