使用带有SendKeys的VBA复制

时间:2018-08-09 07:32:14

标签: excel vba excel-vba paste

我正在编写VBA代码,但会导致错误,但是当我使用F8手动调试时,它可以解决错误。

  

错误1004,从分类范围粘贴特殊方法失败

这是代码:

Private Sub CopyStep(wsOutp As Worksheet, ByVal sAdobeFile As String, ByVal sPath As String)

    ActiveWorkbook.FollowHyperlink sPath & sAdobeFile
    AppActivate "Adobe Acrobat Reader DC"
    SendKeys "^a", True
    SendKeys "^c", True
    If Sheets("Menzis").Range("A1") = "" Then
        Sheets("Menzis").Activate
        Sheets("Menzis").Range("A1").PasteSpecial
    Else
        Sheets("Menzis").Activate
        Sheets("Menzis").Range("A1").End(xlDown).Offset(1, 0).PasteSpecial
    End If

End Sub

当我要粘贴特殊字符时出现错误。 (两者)

2 个答案:

答案 0 :(得分:1)

在发送这样的密钥之前和之后添加Application.Wait Now + #0:00:01#

Application.Wait Now + #0:00:01#
SendKeys "^a", True
SendKeys "^c", True
Application.Wait Now + #0:00:01#

确保该动作实际上已执行,并且应用程序需要时间来响应它。这就是为什么它可以与 F8 一起使用的原因。

答案 1 :(得分:0)

如果没有数据低于A1 ,则此Sheets("Menzis").Range("A1").End(xlDown)将导致工作表的最后一行。因此,您不能再.Offset(1, 0)再排一行,因为您超出了最大行数限制。

要查找列中最后使用的行,最好使用xlUp方法:

Sheets("Menzis").Cells(Rows.Count, "A").End(xlUp)

然后偏移

Sheets("Menzis").Cells(Rows.Count, "A").End(xlUp).Offset(1, 0)

Private Sub CopyStep(wsOutp As Worksheet, ByVal sAdobeFile As String, ByVal sPath As String)
    ActiveWorkbook.FollowHyperlink sPath & sAdobeFile
    AppActivate "Adobe Acrobat Reader DC"
    SendKeys "^a", True
    SendKeys "^c", True

    Sheets("Menzis").Activate 'not necessarily needed to paste
    Sheets("Menzis").Cells(Rows.Count, "A").End(xlUp).Offset(1, 0).PasteSpecial
End Sub

如果仍然引发错误,您需要在粘贴之前添加Application.Wait Now + #0:00:01#,如Vityata在其评论中指出的那样。