2017-02-08 9 views
-1

Ich erstelle einen VBA-Makro, um einen gefilterten Datenbereich in eine Vorlage zu ziehen. Ich bekomme immer den Fehler Range nicht definiert.Bereich kann nicht ausgewählt werden

Ich habe versucht, das Macro Recording Tool in Excel zu verwenden, aber wenn ich versuche, es mit meinem geschriebenen Code zu verwenden, bricht es sofort.

'filter to correct range 
ActiveSheet.Range("$A$1:$X$1647").AutoFilter Field:=14, Criteria1:="-333" 
ActiveSheet.Range("$A$1:$X$1647").AutoFilter Field:=17, Criteria1:= _ 
    "rslicenceHolder" 

'Copy Results and Paste into Template 
Range("A1082:T1082").Select 
Range(Selection, Selection.End(xlDown)).Select 
Selection.Copy 
Active.Workbook("Sample Chasers Template .xlsx").Activate 
Sheets("RS Chasers").Select 
Range("A4").Select 
ActiveSheet.Paste 
+0

was ist Ihr Ziel? Möchten Sie alle gefilterten Werte oder nur gefilterte Werte in einem bestimmten Zeilenbereich kopieren/einfügen? – user3598756

+1

Erstens, anstatt ".Select" überall zu verwenden, verwenden Sie Variablen, um diese Bereiche zu erstellen und zu speichern. Die Verwendung von select ist ein Problem, denn wenn Sie während der Ausführung des Codes irgendwo in Excel klicken, wird alles weggeworfen, weil Sie die aktuelle Auswahl ändern. – Blackhawk

+0

Zweitens, was ist "Active.Workbook"? Es sollte "ActiveWorkbook" sein. – Blackhawk

Antwort

0

Ihr Verweis auf die Arbeitsmappe "Sample Chasers Template .xlsx" ist falsch. Versuchen Sie folgendes:

ActiveSheet.Range("$A$1:$X$1647").AutoFilter Field:=14, Criteria1:="-333" 
ActiveSheet.Range("$A$1:$X$1647").AutoFilter Field:=17, Criteria1:= _ 
    "rslicenceHolder" 

'Copy Results and Paste into Template 
Range("A1082:T1082").Select 
Range(Selection, Selection.End(xlDown)).Select 
Selection.Copy 
'Active.Workbook(Sample Chasers Template .xlsx").Activate 
Workbooks("Sample Chasers Template .xlsx").Activate 

Sheets("RS Chasers").Select 
Range("A4").Select 
ActiveSheet.Paste 

Ich sollte erwähnen, aber, dass Sie immer noch kopiert werde und Einfügen A1082: T1082 und ab, unabhängig davon, wo Ihre gefilterten Ergebnisse tatsächlich sind. Sie können auch wie das Stück etwas ersetzen:

Range("A1:T1").Select 
Range(Selection, Selection.End(xlDown)).Select 
0

bearbeitet tatsächlichen Arbeitsmappe Namen enthalten, wie OP angegeben

vorausgesetzt, Sie kopieren möchten/einfügen alle Spalten A bis T gefilterten Zellen mit Ausnahme von Header:

Dim repWB as Workbook, tempWb as Workbook 

Set tempWb = Workbooks.Open("C:\Desktop\Template.xlsx") '<--| change "C:\Desktop\" to actual path of template workbook 
Set repWB = Workbooks.Open("C:\Desktop\Report.xlsx") '<--| change "C:\Desktop\" to actual path of report workbook 
With repWB.Range("$A$1:$X$1647") 
    .AutoFilter Field:=14, Criteria1:="-333" 
    .AutoFilter Field:=17, Criteria1:="rslicenceHolder" 
    If Application.WorksheetFunction.Subtotal(103, .Cells) > 1 Then .Resize(.Rows.count - 1, 20).Offset(1).SpecialCells(xlCellTypeVisible).Copy    tempWb.Sheets("RS Chasers").Range("A4") 
    .Parent.AutoFilterMode = False 
End With 
+0

Das funktioniert gut, aber jetzt bekomme ich Fehler 9 Index außerhalb des Bereichs, aber es kopiert es und der Fortschritt ist immer gut. Im Moment habe ich beide Arbeitsmappen wie folgt: Dim wkb als Arbeitsmappe und Dim tmp als Arbeitsmappe – bagleyboy

+0

Set tmp = Arbeitsmappen.Open (Template.xlsx) und Set wkb = Arbeitsmappen.Open (Report.xlsx) – bagleyboy

+0

Sie müssen Geben Sie den vollständigen Pfad und die Anführungszeichen ein, z 'Setzen Sie tmp = Workbooks.Open (" C: \ Desktop \ Template.xlsx ")' –

2

Der folgende Code wird die gefilterte Tabelle aus Ihrem Blatt auf „RS Chasers“ Blatt in „Beispiel Chasers Vorlage .xlsx“ Arbeitsmappe kopieren.

Hinweis: versuchen ActiveSheet mit zu vermeiden, Select und Selection und stattdessen voll qualifizierten Objekte verwenden.

-Code

Option Explicit 

Sub CopyFilterData() 

Dim Rng As Range, VisRng As Range 

With Worksheets("Sheet1") '<-- modify "Sheet1" to your sheet's name 
    Set Rng = .Range("$A$1:$X$1647") ' <-- better use referenced sheet than ActiveSheet 

    Rng.AutoFilter Field:=14, Criteria1:="-333" 
    Rng.AutoFilter Field:=17, Criteria1:="rslicenceHolder" 

    Set VisRng = Rng.Resize(Rng.Columns(17).SpecialCells(xlCellTypeVisible).Cells.Count, 20).Offset(1, 0) '<-- set visible Range to filtered range 

    VisRng.Copy Destination:=Workbooks("Chasers Template.xlsx").Worksheets("RS Chasers").Range("A4") '<-- copy >> paste in 1 line 
End With 

End Sub 
+0

Danke! Dies funktioniert wie ein Zauber, muss immer daran denken, Dims für Bereiche zu verwenden. – bagleyboy

Verwandte Themen