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

Forumthread: Autofilter auf mehrere Tabellenblätter

Autofilter auf mehrere Tabellenblätter
29.04.2016 09:09:11
Thomas
Hallo zusammen,
mein Problem ist ähnlich dieses Threads:
https://www.herber.de/forum/archiv/976to980/979392_Autofilter_ueber_mehrere_Tabellenblaetter.html
Im konkreten Fall habe ich mehrere Datenblätter - alle beginnen mit TB_ - die alle Autofilter im Bereich A13:D13 aufweisen. Für mich ist nun relevant, das der Filter, der in B13 gesetzt wird, für alle Blätter übernommen wird.
Anbei habe ich eine Beispieldatei hochgeladen. Es gibt mehr als die dort vorhandenen 2 Tabellenblätter.
Leider kann ich VBA Codes nur mit Hilfe der Makroaufzeichnung adaptieren - der konkrete Fall ist mir zu abstrakt - ich hoffe Ihr könnt mir helfen.
Vielen Dank.
https://www.herber.de/bbs/user/105335.xlsx  _
_
_
_
a>

Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
...</pre> Format ausschalten (owT)
29.04.2016 10:48:50
EtoPHG

AW: ...</pre> Format ausschalten (owT)
29.04.2016 11:15:25
Thomas
Leider weiß ich nicht, wie ich in diesem Forum einen Beitrag editieren kann - gerne nehme ich das pre Format dann raus

AW: Autofilter auf mehrere Tabellenblätter
29.04.2016 11:17:18
Michael
Hallo Thomas!
Makro direkt in Deiner Bsp-Datei, teste mal: https://www.herber.de/bbs/user/105336.xlsm
Stell Dich in Blatt 1 oder 2, setze einen Filter in B und führe das Makro "MasterFilter" aus; ggf. auch mit zusätzlichen Blättern ausprobieren. Setze manuell einen Filter in Blatt 2, starte dann das Makro aus Blatt 1 und schau was passiert.
Gib Bescheid!
LG
Michael

Anzeige
AW: Autofilter auf mehrere Tabellenblätter
29.04.2016 14:25:37
Thomas
Hallo Michael,
vielen Dank für die Hilfe.
Das Makro funktioniert eigentlich, jedoch werden nicht mehr alle Baugruppen angezeigt wenn ich "Alle anzeigen" auswähle.
Hansueli hat ebenfalls eine Lösung gesendet - dort klappt es, aber ich würde das gerne auf ein Formularsteuerelement legen - was mit seinem Code nicht klappt...
Herzlichen Dank vorab!

Anzeige
Ergänzung für "Alles anzeigen"...
02.05.2016 09:53:00
Michael
Hallo Thomas!
Hier doch noch meine Ergänzung, damit das mit "Alle anzeigen" klappt: https://www.herber.de/bbs/user/105365.xlsm
Diesen Code kannst Du natürlich auch über eine Schaltfläche aufrufen, aber diesbzgl. siehe Hansuelis Nachfrage und Ergänzung.
LG
Michael

Anzeige
AW: Autofilter auf mehrere Tabellenblätter
29.04.2016 11:55:04
EtoPHG
Hallo Thomas,
Kopiere untenstehenden Code in DieseArbeitsmappe
Option Explicit
Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As  _
Boolean)
Const cWsPrefix As String = "TB_"
Const cRcTest As String = "$B$13"
Dim iX As Integer, iXF As Integer
Dim arrFilter()
If Sh.Type = xlWorksheet And Left(Sh.Name, Len(cWsPrefix)) = cWsPrefix Then
If Sh.AutoFilterMode = False Then Exit Sub
If Target.Address = cRcTest Then
Cancel = True
With Sh.AutoFilter
With .Filters
ReDim arrFilter(1 To .Count, 1 To 3)
For iXF = 1 To .Count
With .Item(iXF)
If .On Then
arrFilter(iXF, 1) = .Criteria1
If .Operator Then
arrFilter(iXF, 2) = .Operator
arrFilter(iXF, 3) = .Criteria2
End If
End If
End With
Next
End With
End With
For iX = 1 To Worksheets.Count
If Left(Worksheets(iX).Name, Len(cWsPrefix)) = cWsPrefix And _
Worksheets(iX).Name  Sh.Name Then
With Worksheets(iX)
On Error Resume Next
.ShowAllData
On Error GoTo 0
For iXF = 1 To UBound(arrFilter(), 1)
If Not IsEmpty(arrFilter(iXF, 1)) Then
If arrFilter(iXF, 2) Then
.Cells.AutoFilter Field:=iXF, Criteria1:=arrFilter(iXF, 1), _
Operator:=arrFilter(iXF, 2), Criteria2:=arrFilter(iXF, 3)
Else
.Cells.AutoFilter Field:=iXF, Criteria1:=arrFilter(iXF, 1)
End If
End If
Next iXF
End With
End If
Next iX
MsgBox "Filter Einstellung wurde auf alle TB_Blätter übertragen!", vbInformation '  _
bei Bedarf auskommentieren
End If
End If
End Sub
Wenn du nun in einem "TB_Blatt" den Filter in B13 änderst, machst du anschliessend einen Rechtsklick in die Zelle und damit wird die Einstellung auf alle anderen "TB_Blätter" übertragen.
Gruess Hansueli

Anzeige
AW: Autofilter auf mehrere Tabellenblätter
29.04.2016 14:22:09
Thomas
Hallo,
das funktioniert genauso wie ich will. Das i-Tüpfelchen wäre wenn ich diesen Code auf ein Formularsteuerelement legen könnte und nicht einen Rechtsklick in Zelle B13 machen muss. Leider bekomme ich das mit rüberkopieren nicht hin - bei der sh Definition bleibt der Debugger hängen.
Vielen Dank vorab!

Anzeige
Ich hätte mich auch über Feedback gefreut! :-( owT
29.04.2016 14:26:52
Michael

Ah, sorry, schon gesehen!...
29.04.2016 14:27:57
Michael
Thomas,
... da war ich zu voreilig.
Hansueli reicht Dir sicher noch was nach dazu!
LG
Michael

AW: Autofilter auf mehrere Tabellenblätter
29.04.2016 15:55:58
EtoPHG
Hallo Thomas,
Erkläre mir bitte den Vorteil eines Steuerelements (z.B. ein CommandButton?). Wo ist dieser platziert?
Da du mit der Maus sowieso schon den Autofilter Dropdown änderst, befindet sich der Cursor in der Nähe der Zelle und muss nicht nochmals gross verschoben werden, nämlich zum Steuerelement! Die Zellen B13 sind also implizite 'Steuerelemente'!
Meine Lösung hat den Vorteil:
a) Wenn immer ein neues TB_Blatt dazukommt. Kein Problem.
b) Kann auf jedem TB_Blatt ausgeführt werden und alle anderen Blätter werden angepasst!
c) Braucht nicht auf jedem Blatt einen 'Ausführungs'-Button
Gruess Hansueli
Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Autofilter auf mehrere Tabellenblätter anwenden


Schritt-für-Schritt-Anleitung

Um einen Autofilter auf mehrere Tabellenblätter in Excel anzuwenden, befolge diese Schritte:

  1. Vorbereiten der Blätter: Stelle sicher, dass alle relevanten Blätter den gleichen Datenaufbau haben, z.B. alle beginnen mit "TB_" und haben Filter in der Zeile 13.

  2. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  3. Code einfügen: Kopiere den folgenden VBA-Code in das Modul „DieseArbeitsmappe“:

    Option Explicit
    Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
       Const cWsPrefix As String = "TB_"
       Const cRcTest As String = "$B$13"
       Dim iX As Integer, iXF As Integer
       Dim arrFilter()
       If Sh.Type = xlWorksheet And Left(Sh.Name, Len(cWsPrefix)) = cWsPrefix Then
           If Sh.AutoFilterMode = False Then Exit Sub
           If Target.Address = cRcTest Then
               Cancel = True
               With Sh.AutoFilter
                   With .Filters
                       ReDim arrFilter(1 To .Count, 1 To 3)
                       For iXF = 1 To .Count
                           With .Item(iXF)
                               If .On Then
                                   arrFilter(iXF, 1) = .Criteria1
                                   If .Operator Then
                                       arrFilter(iXF, 2) = .Operator
                                       arrFilter(iXF, 3) = .Criteria2
                                   End If
                               End If
                           End With
                       Next
                   End With
               End With
               For iX = 1 To Worksheets.Count
                   If Left(Worksheets(iX).Name, Len(cWsPrefix)) = cWsPrefix And _
                   Worksheets(iX).Name <> Sh.Name Then
                       With Worksheets(iX)
                           On Error Resume Next
                           .ShowAllData
                           On Error GoTo 0
                           For iXF = 1 To UBound(arrFilter(), 1)
                               If Not IsEmpty(arrFilter(iXF, 1)) Then
                                   If arrFilter(iXF, 2) Then
                                       .Cells.AutoFilter Field:=iXF, Criteria1:=arrFilter(iXF, 1), _
                                       Operator:=arrFilter(iXF, 2), Criteria2:=arrFilter(iXF, 3)
                                   Else
                                       .Cells.AutoFilter Field:=iXF, Criteria1:=arrFilter(iXF, 1)
                                   End If
                               End If
                           Next iXF
                       End With
                   End If
               Next iX
               MsgBox "Filter Einstellung wurde auf alle TB_Blätter übertragen!", vbInformation
           End If
       End If
    End Sub
  4. Makro testen: Setze einen Filter in Zelle B13 eines beliebigen TB_Blattes und mache dann einen Rechtsklick. Der Filter wird auf alle anderen TB_Blätter angewendet.


Häufige Fehler und Lösungen

  • Fehler: Filter funktioniert nicht: Stelle sicher, dass alle Blätter den gleichen Aufbau haben und die Filter in der gleichen Zeile (A13:D13) gesetzt sind.
  • Fehler: „Alle anzeigen“ zeigt nicht alle Daten: Verwende die angepasste Version des Codes von Michael, die das Problem mit „Alle anzeigen“ löst.

Alternative Methoden

Eine alternative Methode, um den Excel-Filter über mehrere Tabellenblätter zu steuern, ist die Verwendung von Formularsteuerelementen. Du kannst einen Button erstellen, der das Makro ausführt, wenn du ihn klickst. Das vermeidet den Rechtsklick in Zelle B13.


Praktische Beispiele

Nehmen wir an, du hast mehrere Datenblätter, die alle mit "TB_" beginnen und in Zelle B13 einen Dropdown-Filter haben. Wenn du in einem dieser Blätter einen Filter setzt, wird dieser automatisch auf alle anderen TB_Blätter übertragen, was bedeutet, dass du mit nur einem Filter mehrere Tabellen gleichzeitig filtern kannst.


Tipps für Profis

  • Wenn du excel mehrere filter gleichzeitig anwenden möchtest, kannst du den bestehenden Code erweitern, um mehrere Kriterien zu berücksichtigen.
  • Achte darauf, dass du die Kopfzeile für alle Blätter übernimmst, um ein konsistentes Layout sicherzustellen.
  • Verwende den Shortcut ALT + F8, um schnell auf deine Makros zuzugreifen.

FAQ: Häufige Fragen

1. Wie kann ich den Filter von einem anderen Tabellenblatt steuern? Du kannst den Filter über VBA auf andere Blätter anwenden, indem du den oben genannten Code modifizierst.

2. Kann ich mehrere Filter gleichzeitig in Excel anwenden? Ja, du kannst mehrere Filter auf einem Tabellenblatt anwenden, indem du die Filterkriterien entsprechend anpasst.

3. Ist dieser Code mit Excel 2016 kompatibel? Ja, der VBA-Code ist mit Excel 2016 und späteren Versionen kompatibel.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige