2017-05-01 2 views
1

Ich habe den folgenden Code erstellt, der bis zu einem Punkt funktioniert dann bekomme ich einen Laufzeitfehler 1004. Könnte jemand helfen? Das Fehlerdialogfeld besagt, dass "PasteSpecial-Methode der Bereichsklasse fehlgeschlagen ist" und die erste .PasteSpecial-Zeile markiert ist.Makro Fehler beim Kopieren Druckbereich und Einfügen in ein anderes Blatt

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 

Um zu klären, ich versuche, den Druckbereich des aktiven Blattes und fügen Sie ihn in der nächsten verfügbaren Zelle auf der Inventarliste zu kopieren. Dieser Code funktioniert, wenn der Bereich ein bestimmter Bereich von Zellen ist (d. H. A1: P55), aber ich möchte den Druckbereich kopieren und einfügen, wenn dies möglich ist.

Antwort

0

Wie Sie selbst herausgefunden haben, müssen Sie den Bereich kopieren und dann PasteSpecial verwenden. Fügen Sie daher rngPrintArea.Copy vor Ihrem With-Block hinzu.

Später, wenn Sie die vor kurzem eingefügten Zellen auf den Druckbereich im "Inventory" Arbeitsblatt hinzufügen möchten, dann müssen Sie diese:

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 
-1

Es gibt keinen Code, der angibt, dass etwas kopiert wird. Wenn Sie eine zu kopierende Zeile hinzufügen, sieht das so aus.

+0

! Ich hatte das verpasst! Erstaunlich, was Sie übersehen können :) – peterreed

0

Like This

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 

jedoch - ich mit dem Hinzufügen von dem kopierten Bereich in den Druckbereich im Inventar tun könnte ... Wissen Sie, was ich noch hinzufügen müsste, um diese Arbeit zu machen? Ich habe selbst damit herumgespielt, aber ich habe noch nicht darüber nachgedacht ...

+0

Im Grunde vergessen, den Bereich zu kopieren. Das ist deine Antwort. Recht? – Masoud

+0

Korrekt. Wenn Sie helfen können, es auch den Druckbereich hinzuzufügen, obwohl das fantastisch wäre. – peterreed

+0

Ich habe es wirklich schwer, herauszufinden, was meinst du mit deinem Kommentar und dem letzten Absatz deiner Antwort. Ich glaube nicht, dass du etwas Schweres willst. Nur wenn du dich ausdrücken kannst, bekommst du Hilfe. – Masoud

Verwandte Themen