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