复制打印区域并粘贴到另一个工作表时出现宏错误

时间:2017-05-01 19:57:43

标签: excel vba excel-vba

我已经创建了下面的代码,然后我得到了一个运行时错误1004.有人可以帮忙吗?错误对话框显示"范围类的PasteSpecial方法失败"并突出显示第一个.PasteSpecial行。

Sub CopyPO()
'
' CopyPO Macro
'

'
   Dim rngPrintArea As Range
   Set rngPrintArea = ActiveSheet.Range(ActiveSheet.PageSetup.PrintArea)
With Sheets("Inventory").Range("A" & Rows.Count).End(xlUp).Offset(1)
    .PasteSpecial Paste:=xlPasteColumnWidths
    .PasteSpecial Paste:=xlPasteValues
    .PasteSpecial Paste:=xlPasteFormats
End With
End Sub

为了澄清,我正在尝试复制活动工作表的打印区域并将其粘贴到库存工作表上的下一个可用单元格中。如果范围是特定范围的单元格(即A1:P55),则此代码有效,但如果可能,我想复制并粘贴打印区域。

3 个答案:

答案 0 :(得分:1)

喜欢这个

Sub CopyPO()

' CopyPO Macro

   Dim rngPrintArea As Range
   Set rngPrintArea = ActiveSheet.Range(ActiveSheet.PageSetup.PrintArea)
   rngPrintArea.Copy
   With Sheets("Inventory").Range("A" & Rows.Count).End(xlUp).Offset(1,0)
        .PasteSpecial xlPasteColumnWidths
        .PasteSpecial xlPasteValues
        .PasteSpecial xlPasteFormats
   End With
End Sub

但是 - 我可以将复制的范围添加到清单中的打印区域...你知道我必须添加什么才能使其工作吗?我自己玩过它,但还没有怀疑......但是......

答案 1 :(得分:1)

正如您自己想出的那样,您需要复制范围,然后使用PasteSpecial。因此,在您的阻止之前添加rngPrintArea.Copy

稍后,如果您要将最近粘贴的单元格添加到"Inventory"工作表中的打印区域,那么您需要:

Sub CopyPO()

   Dim rngPrintArea As Range
   Dim newRange As Range

   Set rngPrintArea = ActiveSheet.Range(ActiveSheet.PageSetup.PrintArea)
   rngPrintArea.Copy

   With Sheets("Inventory").Range("A" & Rows.Count).End(xlUp).Offset(1,0)
    .PasteSpecial xlPasteColumnWidths
    .PasteSpecial xlPasteValues
    .PasteSpecial xlPasteFormats
   End With

  Set newRange = Sheets("Inventory").Range(ActiveSheet.PageSetup.PrintArea)

  'If you want print area to be only the recent pasted range change the following line _
  'to commented line below;

  Set newRange = newRange.Resize(newRange.Rows.Count + _
                 rngPrintArea.Rows.Count, newRange.Columns.Count)

  'Set newRange = Sheets("Inventory").Range("A" & Rows.Count).End(xlUp).Offset(1,0). _
   'Resize(rngPrintArea.Rows.Count,rngPrintArea.Columns.Count)

  Sheets("Inventory").PageSetup.PrintArea = newRange.Address

End Sub

答案 2 :(得分:-1)

没有代码表明正在复制某些内容。如果你添加一行来复制,它看起来就可以了。