Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Makro ausführen, wenn AutoFilter sich ändert.

Makro ausführen, wenn AutoFilter sich ändert.
03.09.2004 18:27:01
Glenn
Hallo an alle,
ich habe mir ein Makro zusammengebaut, sodass Zeilen über 2 Sheets mit dem Autofilter bearbeitet werden können.
Jetzt muß es sich nur noch nach jeder Änderung eines Autofilterkriteriums automatisch ausführen.
Hat irgendjemand eine grobe Idee, wie das funktioniern könnte. Meine bescheidenen Versuche scheinen nämlich in einer Endlosschleife zu enden.
Danke im Voraus
der glenn
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro ausführen, wenn AutoFilter sich ändert.
ypsilon
hi,
der autofilter löst leider kein direktes ereignis aus
wenn du irgendeine formel auf dieser tabelle hast (zur not in einer zelle mit =heute() das heutige datum ausgeben lassen) dann kannst du

Private Sub Worksheet_Calculate()
Stop 'oder eben dein makro
End Sub

benutzen
cu micha
Anzeige
AW: Makro ausführen, wenn AutoFilter sich ändert.
Beate
Hallo Glenn,
da gab es zuletzt eine schöne Lösung von Uwe Küstner im Excel-Center, da ging der Autofilter aus Spaltenmangel auch über 2 Tabellen:
http://www.excel-center.de/forum/read.php?f=1&i=74790&t=74753
Dabei wurde durch ein Worksheet_Activate Makro erreicht, dass beim 2. Tabellenblatt bei Blattaktivierung die gleichen Zeilen wie beim 1. ausgeblendet wurden:

Private Sub Worksheet_Activate()
Dim strAF As String
Dim strUR As String
With Worksheets("Tabelle1")
strUR = .UsedRange.EntireRow.Address(0, 0)
If .AutoFilterMode Then
strAF = .AutoFilter.Range.SpecialCells(xlCellTypeVisible).EntireRow.Address(0, 0)
Me.Range(strUR).EntireRow.Hidden = True
Me.Range(strAF).EntireRow.Hidden = False
Else
Me.Range(strUR).EntireRow.Hidden = False
End If
End With
End Sub

Ich habe es ausprobiert, klappt super.
Gruß,
Beate
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Automatisierung von Makros bei Änderungen im AutoFilter


Schritt-für-Schritt-Anleitung

Um ein Makro automatisch auszuführen, wenn sich der AutoFilter in Excel ändert, kannst du folgende Schritte befolgen:

  1. Öffne das Excel-Dokument und wechsle in den Visual Basic for Applications (VBA) Editor. Dies kannst du tun, indem du die Tastenkombination ALT + F11 drückst.

  2. Finde das entsprechende Arbeitsblatt (Sheet) im Projekt-Explorer, in dem du den AutoFilter verwenden möchtest.

  3. Füge den folgenden Code in das Arbeitsblattmodul ein:

    Private Sub Worksheet_Calculate()
       ' Hier kommt dein Makro
       Call MeinMakro
    End Sub

    Ersetze MeinMakro durch den Namen deines Makros, das du ausführen möchtest.

  4. Speichere deine Änderungen und teste den Filter, um sicherzustellen, dass die Automatisierung funktioniert.


Häufige Fehler und Lösungen

  • Fehler: Endlosschleife beim Ausführen des Makros
    Lösung: Achte darauf, dass dein Makro keine Änderungen am Arbeitsblatt vornimmt, die die Berechnung erneut auslösen könnten. Verwende Application.EnableEvents = False zu Beginn deines Makros, um Ereignisse vorübergehend zu deaktivieren.

  • Fehler: Makro wird nicht ausgeführt
    Lösung: Stelle sicher, dass die Berechnungseinstellungen von Excel auf "Automatisch" gesetzt sind. Dies kannst du unter Formeln > Berechnungsoptionen überprüfen.


Alternative Methoden

Eine weitere Möglichkeit, um Makros bei Änderungen im AutoFilter auszuführen, ist die Verwendung des Worksheet_Activate-Ereignisses. Damit kannst du sicherstellen, dass das Makro ausgeführt wird, wenn das Arbeitsblatt aktiviert wird. Hier ist ein Beispiel:

Private Sub Worksheet_Activate()
    ' Hier kommt dein Makro
    Call MeinMakro
End Sub

Diese Methode ist besonders nützlich, wenn du mit mehreren Blättern arbeitest und sicherstellen möchtest, dass die Sichtbarkeit der Zeilen synchron bleibt.


Praktische Beispiele

Wenn du beispielsweise zwei Tabellenblätter hast, die den gleichen AutoFilter verwenden sollen, kannst du folgenden Code verwenden:

Private Sub Worksheet_Activate()
    Dim strAF As String
    Dim strUR As String
    With Worksheets("Tabelle1")
        strUR = .UsedRange.EntireRow.Address(0, 0)
        If .AutoFilterMode Then
            strAF = .AutoFilter.Range.SpecialCells(xlCellTypeVisible).EntireRow.Address(0, 0)
            Me.Range(strUR).EntireRow.Hidden = True
            Me.Range(strAF).EntireRow.Hidden = False
        Else
            Me.Range(strUR).EntireRow.Hidden = False
        End If
    End With
End Sub

Dieser Code sorgt dafür, dass die sichtbaren Zeilen im zweiten Tabellenblatt automatisch ausgeblendet werden, während die Zeilen im ersten Blatt sichtbar bleiben.


Tipps für Profis

  • Verwende Module für komplexe Makros: Wenn dein Makro umfangreicher ist, solltest du es in ein Standardmodul verschieben, um die Übersichtlichkeit zu erhöhen.

  • Debugging: Nutze die Debugging-Tools im VBA-Editor, um Fehler in deinem Code schnell zu identifizieren. Setze Breakpoints und teste die Ausführung schrittweise.

  • Dokumentation: Kommentiere deinen Code gründlich, damit du und andere ihn später leicht verstehen können.


FAQ: Häufige Fragen

1. Kann ich mehrere Makros gleichzeitig bei einer Filteränderung ausführen?
Ja, du kannst mehrere Makros in der Worksheet_Calculate- oder Worksheet_Activate-Subroutine aufrufen, indem du sie einfach hintereinander nennst.

2. Funktioniert dies auch in Excel Online?
Leider sind VBA-Makros in Excel Online nicht verfügbar. Diese Methoden gelten nur für die Desktop-Version von Excel.

3. Was passiert, wenn ich die AutoFilter-Funktion deaktiviere?
Das Makro wird in diesem Fall nicht ausgeführt, da das AutoFilterMode-Attribut nicht aktiv ist. Du kannst jedoch eine zusätzliche Bedingung einfügen, um andere Aktionen zu definieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige