Excel spinnt
22.06.2020 10:55:17
Michael
ich verstehe Excel nicht. Den folgenden Code habe ich mit dem Macro Recorder aufgenommen:
Sub Makro1()
' Makro1 Makro
ActiveSheet.ListObjects("tabBerichte").Range.AutoFilter Field:=2, Criteria1 _
:="Berichtsversion"
ActiveSheet.ListObjects("tabBerichte").Range.AutoFilter Field:=3, Operator _
:=xlFilterValues, Criteria2:=Array(1, "6/30/2020")
Range("tabBerichte").Select
Range("C6").Activate
Selection.Copy
ActiveSheet.ListObjects("tabBerichte").Range.AutoFilter Field:=2
ActiveSheet.ListObjects("tabBerichte").Range.AutoFilter Field:=3
Range("B95").Select
ActiveSheet.Paste
End Sub
Zunächst werden in einer Tabelle zwei Filter gesetzt, dann wir der sichtbare Bereich mit "Strg A" ausgewählt und kopiert. Danach werden die Filter wieder einzeln zurückgesetzt und der kopierte Bereich unter der Tabelle eingefügt.
Wenn ich den Code jetzt aber laufen lasse bekomme ich eine Fehlermeldung und zwar an der Stelle AcitveSheet.Paste. Warum? Weil zu dem Zeitpunkt, wenn die Zeile aufgerufen wird, nichts mehr zum kopieren selektiert ist. Nachdem die Zeile ActiveSheet.ListObjects("tabBerichte").Range.AutoFilter Field:= 2 durchlaufen ist, ist der Copybereich weg. Beim händischen Durchlaufen, also während der Aufzeichnung des Macro Recorders, bleibt der Copybereich bestehen und der selektierte Bereich kann kopiert werden. Warum ist dies so?
Noch zum Verständnis: Die beiden Zeilen vor Range("B95").Select habe ich gebraucht, um die gesetzten Filter zurückzusetzen, um danach die letzte Zeile zu ermitteln und den kopierten Bereich unter die Tabelle zu setzen.
Ich habe das Problem jetzt anderweitig gelöst. Ich ermittle die letzte Zeile vor dem Kopieren, so brauche ich die Filter nicht mehr zurückzusetzen und das Kopieren funktioniert. Aber was ist an dem Code falsch, bzw. warum setzt VBA den Bereich zurück und Excel händisch nicht? Und hat jemand eine Lösung, wie das Zurücksetzen verhindert werden kann?
Beste Grüße
Michael