【问题标题】:Second time I try to print I get run time error '1004' paste special method of range class failed第二次尝试打印时出现运行时错误“1004”粘贴范围类的特殊方法失败
【发布时间】:2021-09-17 10:09:59
【问题描述】:

我已经使用数据表上为每个寄存器保存的数据自动化了寄存器,这些数据通过 VBA 馈送到“打印输出”表。

第一次运行有效。当我选择另一个时,我得到

'运行时错误'1004'粘贴范围类的特殊方法失败'

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

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

我有两个版本,一个是记录的版本,另一个是尝试引用所有范围的版本(均已附上)。该宏继承于已经选择数据表的宏

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

【问题讨论】:

    标签: excel vba runtime-error excel-2010


    【解决方案1】:

    似乎是未保护工作表导致问题。
    但是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,您会看到错误再次出现。

    【讨论】:

    • 谢谢它现在有效。我第一次提出问题,但我找不到让大家知道问题已解决的方法
    • 我很高兴它成功了。答案的“赞成/反对”箭头下应该有一个复选框,您可以使用它来将答案标记为可接受,并将问题标记为已回答。
    猜你喜欢
    • 1970-01-01
    • 2014-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-16
    • 2016-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多