使用 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.
一起工作的原因
我正在编写 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.
一起工作的原因