arrBereich = Worksheets("Splitting").Range("$A$2:$A$" & lngZeileMax).Value
Du bekommst hier ein Array - allerdings ein zweidimensionales Array.
Besser:
arrBereich = Application.Transpose(Worksheets("Splitting").Range("$A$2:$A$" & lngZeileMax).Value
Weitere Anmerkungen, wenn Du erlaubst:
Worksheets("Abnahmen").Select
Das ist unnötig. Kannst rauslöschen.
With Tabelle3
lngZeileMax = .Range("A" & .Rows.Count).End(xlUp).Row
Da Tabelle3 der Codename für das Arbeitsblatt "Splitting" zu sein scheint, kannst Du das in dem With-Rahmen folglich auch zu Nutze machen:
With Tabelle3
lngZeileMax = .Range("A" & .Rows.Count).End(xlUp).Row
arrBereich = .Range("$A$2:$A$" & lngZeileMax).Value
Aber auch das ist wieder doppelt gemoppelt und liesse sich noch verkürzen und übersichtlicher gestalten:
With Tabelle3
.Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp)).Select
End With
Das .Select (oder auch .Activate) versucht man natürlich stets irgendiwe zu vermeiden. In unserem Fall können wir das sogar ganz gut wie folgt verwenden:
With Tabelle3
arrBereich = .Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp)).Value
End With
Bzw wie oben bereits angemerkt:
With Tabelle3
arrBereich = Application.Transpose(.Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp)).Value)
End With
Worksheets("Abnahmen").Range("$A$1:$R$1000").AutoFilter (...)
Da es hier so ausschaut, also ob in SpalteA alle Zeilen lückenlos untereinander UND in Zeile 1 alle SPalten lückenlos nebeneinander sind, genügt:
Worksheets("Abnahmen").Range("A1").AutoFilter (...)
Ganz gut wäre jetzt noch, Worksheets("...") zu vermeiden, da dort eigentlich ActiveWorkbook.Worksheets("...") steht - sieht man halt nicht.
In manchen Fällen könnte das zu Problemen führen, weil ActiveWorkbook nicht das Workbook ist, auf welches Du Deinen Code ausführen möchtest.
Entweder das Workbook in einer ObjektVariablen referenzieren und voranstellen => ObjektVariable.Worksheets("...")
oder (falls der Code sich in derselben Mappe befindet ThisWorkbook voranstellen => ThisWorkbook.Worksheets("...")
|