第二次尝试打印时出现 运行 时间错误 '1004' 粘贴范围 class 的特殊方法失败

Second time I try to print I get run time error '1004' paste special method of range class failed

我使用为数据 sheet 上的每个寄存器保存的数据自动化了一个寄存器,这些数据通过 VBA 馈送到 'print out' sheet.

第一个 运行 有效。当我 select 另一个我得到

'run time error '1004' paste special method of range class failed'

如果我清除错误,它会工作一次,然后在第二次尝试时失败。

阅读 MS 帮助(我现在找不到)它说类似范围的引用不正确,因此在程序完成之前无法使用。我试着确保 cutcopymode 是假的。我尝试添加一个额外的副本。 PS 值在 sheet 上使用不同的单元格,最后尝试保存 sheet 以查看是否清除了引用。

我有两个版本,一个版本已记录,另一个版本试图引用所有范围(均已附上)。该宏来自已经 select 编辑了数据 sheet

的宏
Sub POP_PRINT_OUT()
'
'   Populate Print Out Sheet with Data from Route Sheet
        
    Application.ScreenUpdating = False
    ActiveSheet.Unprotect
        
    Range("A80:L135").Select
    Selection.Copy
    
    Sheets("Print Out").Select
    ActiveSheet.Unprotect
    
    Sheets("Print Out").Range("A19").Select '# 1004 Error with P.S values below #
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        
    Application.CutCopyMode = False
    Range("A14").Select
    Application.CutCopyMode = False
    'ActiveWorkbook.Save
    
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
    Application.ScreenUpdating = True
        
End Sub
Sub POP_PRINT_OUTxxxx()
'
'   Populate Print Out Sheet with Data from Route Sheet

Dim sh As Worksheet
Dim rng1 As Range
Dim rng2 As Range
    
Set wb = ThisWorkbook
Set sh = wb.Sheets("Print Out")
Set rng1 = ActiveSheet.Range("A80:L135")
Set rng2 = sh.Range("A19:L74")

    Application.ScreenUpdating = False
    ActiveSheet.Unprotect
        
    rng1.Select
    Selection.Copy
    
    sh.Select
    ActiveSheet.Unprotect
    
    rng2.Select '# 1004 Error with P.S values below #
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        
    Application.CutCopyMode = False
    Range("A14").Select
    Application.CutCopyMode = False
    'ActiveWorkbook.Save
    
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
    Application.ScreenUpdating = True
        
End Sub

sheet 的解除保护似乎导致了问题。
avoid using Select.
总是一个好主意 考虑这个简化版本,更改您需要的内容,看看它是否更好。

...
Set rng2 = sh.Range("A19:L74")

sh.Unprotect
rng1.Copy
rng2.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone
sh.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True

end sub

如果在复制和粘贴之间移动 sh.Unprotect,您会再次看到错误 returns。