HERBERS Excel-Forum - das Archiv

Thema: Alle Filter löschen und sortieren

Alle Filter löschen und sortieren
MalikJunior
Hallo Leute,

ich brauche eure Hilfe... ich bin Praktikant und habe von einer anderen Abteilung eine Aufgabe zugewiesen bekommen, bei der es um VBA geht, mit dem ich keine Erfahrung habe. ich habe viel im Internet recherchiert und habe auch 2 Schaltflächen hinzugefügt und ich habe auch versucht, Makros aufzuzeichnen, aber ich bin immer wieder gescheitert. ich weiß, dass es mit dem Befehl Auto open funktioniert, aber leider verstehe ich es nicht, wie gesagt, ich habe keine Erfahrung.

Meine Aufgabe lautet: Beim Öffnen der Excel-Datei sollen alle Filter bis auf eine bestimmte Spalte gelöscht werden und gleichzeitig soll eine bestimmte Spalte direkt absteigend sortiert werden.

Könntet ihr mir helfen, wie ich so etwas programmieren kann? Ich danke euch im Voraus.
AW: Alle Filter löschen und sortieren
Yal
Hallo Malik,

hier ein paar Lern-Tipps

Ein paar Tipps, die das Verstehen + Lernen von VBA beschleunigt:
_ immer zuerst Makrorekorder verwenden (mache ich immer noch). Kurze Aufnahme machen und Code anschauen.
_ Code im Schritt-Modus laufen lassen (F8)
_ dabei das Lokalfenster offen halten (Ansicht, Lokalfenster), um den Zustand der Variablen zu sehen.
_ neugierig sein: was steckt in den Objekten hinter den "+"?
_ Überwachungsausdrücke verwenden: Variable oder Ausdruck markieren, Rechtsklick auf "Überwachung hinzufügen..."
_ Variable verwenden, nur um deren Stand im Lokalfenster zu beobachten.
_ auch gut: Debug.Print xxVariableName, druckt den Zustand einer Variable in das Direktfenster.
_ wenn ein VBA-Begriff nicht bekannt ist, Cursor drauf platzieren und Strg+F1, um an der Online-Hilfe zu gelangen. Dort sich die Zeit nehmen, grundlich zu lesen (die Aufmachung ist nur am Anfang gewöhnungsbedürftig) und die gegebenen Beispiele anzuschauen.
_ wenn die erste Schritte schon gemacht sind, das Objektkatalog anschauen (Ansicht, Objekt-Katalog)

Also nehme jede Aktion einzel auf.
Nehme dann 2 Aktionen zusammen.
Vergleich die aufgezeichneten Codes. So siehst Du, wie Du Code-Teilen zusammenbringen kann.
Lösche schnell den Code, den Du nicht gebrauchen kannst, sonst verlierst Du schnell den Überblick.

Wenn Du eine Aktion per Makro sowohl per Schaltfläche als auch beim Öffnen der Mappe (wobei ich "vor dem Speichern" bevorzugen würde), solltest Du den Code in einer Sub schreiben, die dann von Workbook_Open und vom Schaltfläche gerufen wird

Folgender Code ist im Codepane "DieseArbeitsmappe" abzulegen
Private Sub Workbook_Open()

Filter_zurücksetzen
End Sub


Folgender Code ist im Codepane des Blattes, wo die Schaltfläche steht, abzulegen, bzw. wird automatisch dort abgelegt, wenn man die Schaltfläche rechtsklick und "Code anzeigen" klickt (ActiveX-Steuerelement, nicht Formular-Steuerelement!):
Private Sub CommandButton1_Click()

Filter_zurücksetzen
End Sub


Dann im Codepane einer Modul, was automatisch erzeugt wird, wenn Du eine Makro aufzeichnest, ansonsten in VB-Editor "Einfügen", "Modul", dein tatsächlich wirkende Code:
Public Sub Filter_zurücksetzen()

'...
End Sub

VG
Yal
AW: Alle Filter löschen und sortieren
MalikJunior
Hallo Yal,

danke dir, leider hat es mir nicht geholfen … irgendwie klappt es nicht. Ich will, dass sich alle Filter, nachdem ich Datei öffne, ohne irgendwo zu drücken, dass sich alle Filter zurücksetzt, bis auf die Spalte E (das ist Filter drinnen, wo auch drinnen bleiben kann). Und wie kriege ich es hin, dass es direkt, nachdem Öffnen der Datei die Spalte B direkt absteigend sortiert wird. Kannst du mir, dass einfach schreiben, wie die Codes für die beiden Befehle lautet?

Viele Grüße
Malik
AW: Alle Filter löschen und sortieren
MalikJunior
Hey, damit klappt es schonmal, dass alle Filter nach dem Öffnen der Datei entfernt werden, wie kriege ich es hin, dass alle Filter bis auf Spalte L entfernt werden? Gibt es hier ein kleiner Befehl, was ich einfügen könnte, damit der Filter in der Spalte L nicht entfernt wird?
"
Sub Workbook_Open()
With ActiveWorkbook.ActiveSheet
If .FilterMode Then
.ShowAllData
MsgBox "Es wurden alle Auto-Filter entfernt!", vbOKOnly, " Filter deaktiviert"
End If
End With
End Sub
"
AW: Alle Filter löschen und sortieren
Yal
Hallo Malik,

nun ja, ich habe solche Code nicht parat, weil ich diese immer auf Basis des Makrorekorder(MR) neu erzeugen lasse. Daher müsste ich einen Beispiel aufbauen, filtern und unter MR aufzeichnen lassen.

Es ergibt folgende Code:
Sub Makro1()

ActiveSheet.Range("$B$3:$F$13").AutoFilter Field:=1
ActiveSheet.Range("$B$3:$F$13").AutoFilter Field:=2
End Sub


Field 1 ist hier Spalte B, Field 2 Spalte C. Wie es bei Dir aussieht, weisst nur Du. Bei Bedarf kannst Du eine anonymisierte Datei hier hochladen.

VG
Yal
AW: Alle Filter löschen und sortieren
MalikJunior
Hey Yal,

so sieht meine Formel aus, wie könnte ich hier einbauen, dass explizit in Spalte B der Filter nicht herausgenommen wird? Ich habe das versucht, mit Makros aufzeichnen, aber irgendwie hat es nicht so ganz funktioniert, wüsstest du, wie ich das machen könnte?
"
Sub Workbook_Open()
With ActiveWorkbook.ActiveSheet
If .FilterMode Then
.ShowAllData
MsgBox "Es wurden alle Auto-Filter entfernt!", vbOKOnly, " Filter deaktiviert"
End If
End With

ActiveWorkbook.Worksheets("Eingabe").ListObjects("tbl_Nummernvergabe").Sort. _
SortFields.Clear
ActiveWorkbook.Worksheets("Eingabe").ListObjects("tbl_Nummernvergabe").Sort. _
SortFields.Add2 Key:=Range("tbl_Nummernvergabe[[#All],[A-Nr.]]"), SortOn:= _
xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Eingabe").ListObjects("tbl_Nummernvergabe"). _
Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
"

VG
Malik
AW: Alle Filter löschen und sortieren
Yal
Hallo Malik,

wenn Du die gesamte Filterung zurücksetzst, dann weisst Du nicht mehr, wie die Spalte, deren Filter Du nicht zurücksetzen wolltest, vorher gefiltert war.

Sub AlleSpalten_ausser_3_5_zurücksetzen()

'im einem Modul-Codepane ablegen
Dim i

With Worksheets("Eingabe").ListObjects("tbl_Nummernvergabe")
For i = 1 To .ListColumns.Count
Select Case i
Case 3, 5 'Spalten nicht zurücksetzen
Case Else
.Range.AutoFilter Field:=i
End Select
Next
End With
End Sub

Sub Workbook_Open()
' Im Codepane "DieseArbeitsmappe" ablegen
AlleSpalten_ausser_3_5_zurücksetzen
End Sub

Sub CommandButton1_Click()
'im Codepane des Blattes ablegen, wo der CommandButton1 liegt
AlleSpalten_ausser_3_5_zurücksetzen
End Sub


VG
Yal