使用 SendKeys 使用 VBA 复制时出现错误 1004 Methode PasteSpecial

Error 1004 Methode PasteSpecial when copying with VBA with SendKeys

我正在编写 VBA 代码,但会导致错误,但是当我使用 F8 手动调试时,它可以正常工作而不会出现错误。

Error 1004, methode paste special from clase range failed

这是代码:

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

当我想粘贴特殊内容时出现错误。 (他们俩)

如果没有数据 低于 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 在他的评论中指出的那样。

在发送密钥之前和之后添加 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.

一起工作的原因