2017-01-03 4 views
0

Ich versuche, die Werte von einem Blatt zum anderen zu filtern und kopieren, aber ich bekomme in einem meiner Codes stecken. Ich kann nicht scheinen, als Werte eingefügt zu werden oder nicht die korrekte Syntax kennen.vba Filter und fügen Sie als Werte

 Set ws1 = Worksheets("AT") 
    Set ws2 = Worksheets("BT") 
    lr1 = ws1.Cells(ws1.Rows.Count, "B").End(xlUp).Row 
    lr2 = ws2.Cells(ws2.Rows.Count, "A").End(xlUp).Row + 1 
    With ws1.Range("B2", "R" & lr1) 
     .AutoFilter Field:=1, Criteria1:="#N/A" 
     .Copy Destination:=ws2.Cells(lr2, "A") 
     .PasteSpecial (XlPastevalues, , ,) 
    End With 

Der Rest der Codes durch folgen ohne .pastespecial Linie damit ist, warum ich nicht alles kopieren bin hier mit Ausnahme des Abschnitts Ich habe Probleme mit. Im Moment habe ich nicht das folgende Format, da ich am Ende Werte in die vorhandenen Daten einfüge, also füge ich nur Daten (mehr Zeilen) hinzu. Und es gibt Formate auf dem bestehenden, deshalb will ich mich nicht damit anlegen.

Worksheets("Sheet2").Range("A1").PasteSpecial Paste:=xlPasteValues 

Auch wenn jemand kann auch eine andere Art und Weise vorschlagen Filter zu tun, lassen Sie mich wissen. Meine aktuellen Codes funktionieren nur, wenn mein Bereich eine Tabelle ist. Wenn ich also keine Tabelle dafür erstelle, wird sie fehlschlagen. Meine Daten sind von A1 bis R und es gibt einen Header. Ohne es als Tabelle zu setzen, wird es von B2 filtern und es wird einen falschen Filter haben. Siehe unten. Wenn ich filtere und kopiere, muss ich den Header nicht in meine vorhandenen Daten kopieren.

enter image description here

Antwort

1

kann ich denke an ein paar Möglichkeiten, es zu tun, aber ohne Sie Änderung bestehender Code viel können Sie spalten nur die Kopie Paste Methoden. Wenn Sie nicht große Datenmengen sprechen, sollte dies kein Problem sein.

Set ws1 = Worksheets("AT") 
Set ws2 = Worksheets("BT") 
lr1 = ws1.Cells(ws1.Rows.Count, "B").End(xlUp).Row 
lr2 = ws2.Cells(ws2.Rows.Count, "A").End(xlUp).Row + 1 
With ws1.Range("B2", "R" & lr1) 
    .AutoFilter Field:=1, Criteria1:="#N/A" 
    .Copy 
End With 
ws2.Cells(lr2, "A").PasteSpecial xlPasteValues 
Application.CutCopyMode = False 
+0

Danke, es funktioniert super! Gibt es eine Möglichkeit, einen Filter zu erstellen, ohne den Bereich als Tabelle zu definieren? Wie ich es in meiner zweiten Hälfte meiner Ausgabe beschrieben habe? Ihre Codes funktionieren einwandfrei, aber ich muss meinen Datenbereich als Tabelle festlegen. – sc1324

+1

ist sicher, verwenden Sie einfach die .ListObjects ("Table1") Referenz in etwa genauso. Wenn Sie ein Makro aufzeichnen, erhalten Sie die genaue Syntax. Wahrscheinlich einfacher als zu versuchen, es von Hand zu bekommen. Nimm einfach das bisschen, was du brauchst, aber es ist nah dran. Ich möchte zunächst alle Filter löschen und dann filtern, was ich sehen möchte. Wenn Sie Ihre Kopiermethode auf die Tabelle anwenden (dies ist aus dem Speicher, also nicht 100% ig sicher), verwenden Sie den .DataBodyRange und Sie müssen möglicherweise nur sichtbare Zellen explizit angeben, aber ich erinnere mich im Moment nicht. –

+0

Danke, ich werde mehr über das Thema erfahren und noch einmal, Ihre Methode funktioniert ganz gut !! Danke – sc1324

Verwandte Themen