Ich möchte ein Makro schreiben, so dass nachdem ich einen manuellen Filter angewendet habe, ein zweites von mir bereits geschriebenes Makro ausgeführt wird.
Wie muss der Code hierfür aussehen?
Vielen Dank schon einmal.
Private Sub Worksheet_Calculate()
Call Makro
End Sub
cuUm ein Makro automatisch auszuführen, nachdem ein Filter in Excel angewendet wurde, kannst Du das Worksheet_Calculate-Ereignis verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:
Öffne Deine Excel-Datei und drücke ALT + F11, um den Visual Basic for Applications (VBA) Editor zu öffnen.
Wähle im Projekt-Explorer das Arbeitsblatt aus, auf dem Du das Makro ausführen möchtest.
Füge den folgenden Code in das Code-Fenster ein:
Private Sub Worksheet_Calculate()
Call DeinMakroName
End Sub
Ersetze DeinMakroName mit dem Namen des Makros, das Du ausführen möchtest.
Schließe den VBA-Editor und kehre zu Excel zurück.
Wende einen Filter auf Deine Daten an. Das Makro wird automatisch ausgeführt, wenn die Berechnung des Arbeitsblatts erfolgt.
Fehler: Das Makro wird nicht ausgeführt.
Formeln > Berechnungsoptionen und wähle Automatisch.Fehler: Das Makro führt nicht die gewünschten Aktionen aus.
Wenn Du eine andere Methode als das Worksheet_Calculate-Ereignis ausprobieren möchtest, kannst Du auch die Worksheet_Change-Ereignisprozedur verwenden. Hier ein Beispiel:
ALT + F11).Füge den folgenden Code in das Arbeitsblatt ein:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Me.Range("A1")) Is Nothing Then
Call DeinMakroName
End If
End Sub
Hierbei wird das Makro ausgeführt, wenn sich der Wert in Zelle A1 ändert. Du kannst die Zelle nach Bedarf anpassen.
Hier ist ein praktisches Beispiel für ein Makro, das die Anzahl der sichtbaren Zeilen nach dem Filtern zählt:
Sub ZaehleSichtbareZeilen()
Dim SichtbareZeilen As Long
SichtbareZeilen = Application.WorksheetFunction.Subtotal(103, Range("A:A")) ' Zählt sichtbare Zeilen in Spalte A
MsgBox "Anzahl sichtbarer Zeilen: " & SichtbareZeilen
End Sub
Füge dieses Makro in die Worksheet_Calculate-Ereignisprozedur ein, um die Anzahl sichtbarer Zeilen nach dem Anwenden des Filters anzuzeigen.
Nutze die Application.ScreenUpdating-Eigenschaft, um die Bildschirmaktualisierung während der Ausführung des Makros zu deaktivieren. Das beschleunigt die Ausführung:
Application.ScreenUpdating = False
' Dein Code hier
Application.ScreenUpdating = True
Teste Dein Makro zunächst in einer Kopie Deiner Excel-Datei, um unerwartete Ergebnisse zu vermeiden.
1. Wie kann ich sicherstellen, dass das Makro nur bei bestimmten Filtern ausgeführt wird?
Du kannst Bedingungen im Worksheet_Calculate-Ereignis hinzufügen, die prüfen, ob ein bestimmter Filter aktiv ist.
2. Funktioniert das auch in Excel Online?
Leider unterstützt Excel Online keine VBA-Makros. Dieses Verfahren ist nur in den Desktop-Versionen von Excel verfügbar.