2016-12-01 3 views
2

Ich habe seit mehr als 5 Stunden darauf geachtet, keine richtige Lösung zu finden. Das ist nicht mein Hauptgeschäft, nur was ich in der Arbeit mache, um zu helfen.Fehlercode 1004 beim Kopieren/Einfügen von VBA Cant Solve

Grundsätzlich kopiere ich aus einem Blatt, das Zeilen gefiltert hat, auf ein anderes Blatt und platziere es in der letzten Zeile in Spalte A, um es einzufügen.

Das funktionierte perfekt, bevor ich einige Änderungen gemacht und jetzt ist es völlig gebrochen, jede Hilfe dankbar, hier klar sein, ist die gebrochene Klumpen Spaghetti-Code ....

Sheets("Working Sheet").Select 
Selection.Copy 
Sheets("Sent Items").Select 

Dim LastRow As Long 
With ActiveSheet 
    LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row + 1 
End With 

Range("A" & LastRow).Select 
ActiveSheet.Paste 
Application.CutCopyMode = False 
Columns("K:K").EntireColumn.AutoFit 
Sheets("Sent Items").Select 

Es bewirkt, dass ein Fehler 1004 sagen die Größe muss gleich sein ??? Die Paste verursacht den Fehler. Jede Hilfe ist gut, habe nach der Antwort gesucht.

+0

Größe ist die gleiche ist in der Regel durch Anrufe mergerd aus das Original ("Copy") Teil - gibt es irgendwelche? – Jeremy

+0

Es gibt keine verbundenen Zellen auf der Kopie, lesen Sie, dass in einem anderen Beitrag Danke für die Antwort obwohl –

Antwort

1

Da Sie gefilterte Zeilen kopieren, ist es immer eine gute Methode, die Methode SpecialCells zu verwenden.

Siehe den Refaktorcode unten. Auch immer am besten zu avoid using select und arbeiten direkt mit Objekten.

Dim wsWorking as Worksheet 
Set wsWorking = Sheets("Working Sheet") 

With wsWorking 

    .Select 
    Selection.SpecialCells(xlCellTypeVisible).Copy 

End With 

Dim wsSent as Worksheet 
Set wsSent = Sheets("Sent Items") 

With wsSent 

    Dim LastRow As Long 
    LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row + 1 

    .Range("A" & LastRow).PasteSpecial 

    .Columns("K:K").EntireColumn.AutoFit 

    .Range("A1").Select 'to make sure you end up on that sheet 

End With 
+0

Dies definitiv auf diese Code Abschnitt aber immer noch nicht funktioniert. Jetzt heißt es> Sheets ("Arbeitsblatt"). Selection.SpecialCells (xlCellTypeVisible) .Das Kopierobjekt unterstützt keine Eigenschaft oder Methode –

+0

@DSilva - Versuchen Sie es jetzt. Ich würde von "Auswahl" abraten, wenn Sie nicht unbedingt müssen. Es ist besser, den Bereich direkt zu definieren. Aber meine Änderungen sollten Sie für den Moment umdrehen, wenn Sie den ausgewählten Raise am Anfang des Makros wirklich verwenden müssen. –

+1

@ScottHoltzman, dies setzt voraus, dass bei dem Makro, das das Blatt "Arbeitsblatt" ausführt, das _aktive_ Blatt ist, so dass 'rngSelection' tatsächlich _das_ sehr Blatt ausgewählte Zellen erfasst. Da wir keine Hinweise von OP haben, wie diese "Selection" zu identifizieren ist, ist es sicherer, ein 'Worksheet (" Arbeitsblatt ") zu belassen. Wählen Sie, bevor Sie' Selection' verwenden. – user3598756

1

Sie Ihren Code Refactoring könnte wie folgt aussehen:

Worksheets("Working Sheet").Select 
Selection.SpecialCells(xlCellTypeVisible).Copy Destination:=Worksheets("Sent Items").Cells(Rows.Count, 1).End(xlUp).Offset(1) 

oder, wenn Sie in Einfügen von Werten nur Interesse:

Dim area As Range 

Worksheets("Working Sheet").Select 
For Each area In Selection.SpecialCells(xlCellTypeVisible).Areas 
    Worksheets("Sent Items").Cells(Rows.Count, 1).End(xlUp).Offset(1).Resize(area.Rows.Count, area.Columns.Count).Value = area.Value 
Next area