Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1764to1768
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Excel spinnt

Excel spinnt
22.06.2020 10:55:17
Michael
Hallo zusammen,
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

    5
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Datum
    Anwender
    Anzeige
    Weil Select/Activate die Auswahl ändern,
    22.06.2020 11:17:06
    EtoPHG
    Michael,
    und diese Befehle zu fast 100% in VBA kontraproduktiv und überflüssig sind. Zudem ist muss man höllisch aufpassen, wenn ActiveSheet, ActiveCell im Spiel sind, dass tatsächlich das richtige Tabellenblatt aktiviert ist. Darum ist auch hier anstelle dieser eine vollständige Referenzierung der Objekte empfohlen. Deine Selbsteinschätzung VBA gut ist mehr Wunsch, als Realität.
    Lies mal: Der Malermeister und sein Geselle
    Gruess Hansueli
    AW: Weil Select/Activate die Auswahl ändern,
    22.06.2020 13:23:17
    Michael
    Hallo Hansueli,
    im Originalcode verwende ich weder ActiveSheet oder ActiveCell. Was du schreibst ist mir durchaus bewusst. Ich habe den Macro Recoder nur benutzt, um zu zeigen, dass auch OHNE veränderten oder zusätzliche Code der Fehler/das Problem reproduziert werden kann.
    Es geht mir ja auch um die Frage, wie ein gesetzter Filter einer Tabelle in VBA zurückgenommen werden kann ohne den zu kopierenden Bereich zurückzusetzen, bzw. wieso passiert dies, wo doch dieselben Aktionen in Excel dies nicht tun.
    Wenn dieses Wissen zu guten VBA-Kenntnissen zählt, dann habe ich wirklich keine.
    Grüße
    Michael
    Anzeige
    AW: Na dann, viel Vergnügen beim Grübeln...(owT)
    22.06.2020 15:31:50
    EtoPHG

    AW: Excel spinnt
    27.06.2020 22:37:06
    onur
    Und wer oder was zwingt dich dazu, die Filter zurückzusetzen, BEVOR du wieder eingefügt hat?
    AW: Excel spinnt
    28.06.2020 12:00:36
    GerdL
    Moin Michael!
    Sub Unit()
    With ActiveSheet.ListObjects("tabBerichte")
    .Range.AutoFilter Field:=2, Criteria1 _
    :="Berichtsversion"
    .Range.AutoFilter Field:=3, Operator _
    :=xlFilterValues, Criteria2:=Array(1, "6/30/2020")
    Range(.Name).Copy .DataBodyRange(1, 1).Offset(.DataBodyRange.Rows.Count + 1, 0)
    .Range.AutoFilter
    End With
    End Sub
    

    Mit Summenzeile wäre der Offset einfacher.
    Gruß Gerd

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige