Wie aktualisiere ich einen Excel-Autofilter automatisch, wenn Daten geändert werden?
Anwendungsfall: Ich ändere den Wert einer Zelle in einen Wert, der gefiltert wurde. Ich möchte, dass die aktuelle Zeile verschwindet, ohne dass ich etwas anderes tun muss.
microsoft-excel
Sorin
quelle
quelle
Antworten:
Das Austauschen des Codes mit diesem Befehl scheint ebenfalls erfolgreich zu sein (zumindest in Excel 2010):
quelle
Als ich mit Tischen arbeitete, stellte ich fest, dass dies nicht funktionierte. Der Filter befand sich nicht auf dem Blatt, sondern auf dem Tisch. Dieser Code hat den Trick gemacht
Ich fand die Informationen hier: http://www.jkp-ads.com/articles/Excel2007TablesVBA.asp
quelle
Klicken Sie mit der rechten Maustaste auf Ihren Blattnamen, wählen Sie "Code anzeigen" und fügen Sie den folgenden Code ein. Klicken Sie nach dem Einfügen links oben auf das Excel-Symbol unter "Datei" oder geben Sie Alt-F11 ein, um zur Tabellenkalkulationsansicht zurückzukehren.
Dadurch wird die automatische Aktualisierung aktiviert. Vergessen Sie nicht, die Datei in einem Format mit Makrounterstützung zu speichern
.xlsm
.quelle
Ich verwende auch ein VBA / Macro basierend auf
Worksheet_Change
event, aber mein Ansatz ist etwas anders ... Ok, zuerst den Code und dann die Erklärungen:(Verwenden Sie die Tastenkombination Alt+ F11, um das Entwicklungsfenster anzuzeigen, und fügen Sie den Code in das Arbeitsblatt ein, das den Filter enthält, den Sie automatisch aktualisieren möchten.)
In meinem Beispiel gehe ich davon aus, dass es einen einfachen Filter für eine einzelne Spalte gibt (in meinem Fall L) und dass mein Datenbereich in Zeilen von 1 (auch wenn er Überschriften enthält) bis 126 (wählen Sie eine Zahl, die groß genug ist, um zu sein) liegt sicher). Der Vorgang ist einfach: Wenn sich etwas auf meinem Blatt ändert, wird der Filter im angegebenen Bereich entfernt / erneut angewendet, damit er aktualisiert wird. Hier sind Feld und Kriterien zu erläutern .
Das Feld ist ein ganzzahliger Offset des Bereichs. In meinem Fall habe ich nur einen einzelnen Spaltenfilter und der Bereich wird durch eine einzelne Spalte (L) gebildet, die die erste im Bereich ist (daher verwende ich 1 als Wert).
Die Kriterien sind eine Zeichenfolge, die den Filter beschreibt, der auf den Datenbereich angewendet werden soll. In meinem Beispiel möchte ich nur Zeilen anzeigen, in denen sich die Spalte L von 0 unterscheidet (daher habe ich "<> 0" verwendet).
Das ist alles. Weitere Informationen zur Range.AutoFilter-Methode finden Sie unter: https://msdn.microsoft.com/en-us/library/office/ff193884.aspx
quelle
Nur um die Antwort (en) zu konsolidieren:
Sorin sagt:
Klicken Sie mit der rechten Maustaste auf Ihren Blattnamen, wählen Sie "Code anzeigen" und fügen Sie den folgenden Code ein. Klicken Sie nach dem Einfügen links oben auf das Excel-Symbol unter "Datei" oder geben Sie Alt-F11 ein, um zur Tabellenkalkulationsansicht zurückzukehren.
Dadurch wird die automatische Aktualisierung aktiviert. Vergessen Sie nicht, die Datei in einem Format mit Makrounterstützung zu speichern .xlsm.
Und Chris hat diesen Code benutzt (den ich gerade 2010 gemacht habe):
Wenn Sie den Beitrag nicht erweitern, sehen Sie nur die lange Antwort! ;)
quelle
Entschuldigung, nicht genügend Mitarbeiter, um einen Kommentar abzugeben. (Admins, zögern Sie nicht, dies in einen Kommentar oben zu schreiben.) Die Antwort von "danicotra" des Benutzers beginnt mit "Ich verwende ein VBA / Makro, das auch auf dem Worksheet_Change-Ereignis basiert, aber meine Vorgehensweise ..." mit
"Erst Filter entfernen
" und dann anwenden Auch dies
ist die richtige Lösung, wenn Sie Excel 2007+ verwenden. .AutoFilter.ApplyFilter ist jedoch in XL03 und früheren Versionen ungültig, daher zeige ich den folgenden Weg.
Ich bitte echte Experten und Gurus, den Code zu lesen, da ich ziemlich sicher bin, dass es sich um erstklassiges Material handelt. Vielleicht kann die unerklärliche Anzahl der Abstimmungen in Bezug auf diese Antwort umgekehrt werden, wenn die Leute sehen, welche guten Dinge unten getan werden.
danicotra verwendete ein vereinfachtes Beispiel. Tatsächlich können Sie dies allgemeiner tun. Angenommen, mit ActiveSheet für Folgendes (oder ein anderes Blattobjekt):
Speichern Sie den Bereich des Autofilters. Es enthält .AutoFilter.Filters.Count-Spalten und (.AutoFilter.Range.Count / .AutoFilter.Filters.Count) -Zeilen, die in rngAutofilter gespeichert werden
Sammeln Sie in einem Array myAutofilters jede der 4 Eigenschaften der .AutoFilter.Filters.Count-Autofilter-Elemente, und achten Sie darauf, dass Sie "Anwendungsdefinierte Fehler" vermeiden, wenn .On oder .Operator falsch sind. (myAutofilters wird in Schritt 1 auf die Anzahl der Zeilen und Spalten umgestellt.)
Schalten Sie den Filter aus, aber bewahren Sie die Dropdowns mit .ShowAllData auf
Setzen Sie für jedes Filterelement, das Ihrem gespeicherten Array entspricht, 3 der 4 Eigenschaften jedes Autofilterelements zurück. Achten Sie erneut darauf, dass Sie "Anwendungsdefinierte Fehler" vermeiden, wenn .Operator false ist, und zwar für jedes Element "i":
rngAutofilter.AutoFilter Field: = i, Criteria1: = myAutofilters (i, 2)
oder
rngAutofilter.AutoFilter Field: = i, Criteria1: = myAutofilters (i, 2), Operator: = myAutofilters (i, 3), Criteria2: = myAutofilters (i, 4)
Jetzt wird der Autofilter im selben Bereich wie vor Beginn Ihres Codes wiederhergestellt, wobei der Autofilter jedoch auf Datenänderungen aktualisiert wird.
quelle
quelle