2016-04-21 12 views
0

Ich habe Probleme beim Kopieren und Verschieben von gefilterten Daten auf ein neues Blatt für die weitere Auswertung. Das Ziel besteht darin, eine ActiveX-Textbox und eine Befehlsschaltfläche auf Blatt1 zu verwenden, um Daten auf Blatt2 (Daten) zu filtern und die Ergebnisse auf Blatt3 (Berechnung) zu kopieren. Hier ist der Code Ich arbeite mit:Kopie der gefilterten Daten von ActiveX-Steuerelement in verschiedenen Blatt

Private Sub CommandButton1_Click() 

    Sheets("Data").Range("C2").Value = TextBox1.Text 

    Worksheets("Data").Select 
    ActiveSheet.ListObjects("Table1").Range.AutoFilter _ 
     field:=21, Criteria1:="=*" & TextBox1.Text & "*" 

    Range("Table1[[#Headers],[Comp Date]]").Select 
    Range(Selection, Selection.End(xlToRight)).Select 
    Range(Selection, Selection.End(xlDown)).Select 
    Selection.SpecialCells(xlCellTypeVisible).Select 
    Selection.Copy 

    Sheets("Calculation").Select 
    ActiveSheet.Paste 

End Sub 

Wenn ich diesen Code auf dem Modul laufen für sheet1, erhalte ich eine „Methode‚Range‘des Objekts‚_Worksheet‘ist fehlgeschlagen“ Fehlermeldung. Wenn ich jedoch das Codebeispiel für den Kopier- und Einfüge-Task nehme und es in das Modul für Blatt2 lege, das durch eine zweite Befehlsschaltfläche initiiert wurde, funktioniert es einwandfrei. Ich möchte sowohl den Filter als auch das Kopieren und Einfügen mit nur einem Knopfdruck durchführen, wenn dies möglich ist. Kann mir jemand helfen, wo ich falsch liege?

+0

Alle Ihre unqualifizierte 'Range' Anrufe auf das Blatt verweist den Code enthält. Versuchen Sie, alle Spalten aus der Tabelle oder nur einige davon zu kopieren? – Rory

+0

Also müsste ich ein Callout wie "Sheets (" Data ") hinzufügen." vor jedem unqualifizierten Bereich? Ich versuche alle Spalten und alle sichtbaren Zellen aus der Tabelle zu kopieren. – CPAR05

Antwort

1

Basierend auf Ihre Kommentare, versuchen Sie dies:

Private Sub CommandButton1_Click() 
    Dim lo     As ListObject 
    With Sheets("Data") 
     .Range("C2").Value = TextBox1.Text 

     Set lo = .ListObjects("Table1") 
    End With 
    With lo 
     .Range.AutoFilter field:=21, Criteria1:="=*" & TextBox1.Text & "*" 
     .Range.SpecialCells(xlCellTypeVisible).Copy 
    End With 
    Sheets("Calculation").Paste 

End Sub 
+0

Das funktioniert perfekt, danke für die schnelle Hilfe! Wäre es schwierig, Kriterien hinzuzufügen, um vorhandene Daten auf der Berechnungsseite zu löschen, wenn die Befehlsschaltfläche erneut für eine andere Textboxeingabe angeklickt wird? Wenn kein Wert in das Textfeld eingegeben und die Schaltfläche gedrückt wird, gibt es eine Möglichkeit, den Filter nur auszuführen und die Ergebnisse nicht zu kopieren? (d. h. Wiederherstellung auf Standard) – CPAR05