Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1968to1972
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Ausblenden von Tabellenblättern anhand von Filter

Ausblenden von Tabellenblättern anhand von Filter
04.03.2024 16:50:46
Chris
Hallo Zusammen,

ich habe hier eine Frage zu einem bestehenden Makro, das jedoch bei mehrfacher Ausführung inkosistente liefert:

https://www.herber.de/bbs/user/167534.xlsm

Ziel: Wenn man in der Spalte C einen Filter anwendet sollen nur noch Tabellenblätter gezeigt werden die den analogen Namen in Spalte B führen.

Das ganze funktioniert aber sehr unregelmäßig. Manchmal passt es auf den ersten klick, manchmal muss man jedoch das Makro nochmal durchlaufen lassen. Es kommen also, trotz unverändertem Filter unterschiedliche Ergebnisse bei der Ausführung heraus.

Eine weitere Frage: Wenn man nun zusätzliche Tabellenblätter hat (z.b. Name ABC) die vom Ausblenden durch das Makro ausgeschlossen werden sollen - wie würde man das noch angehen?

Danke für euer Feedback und viele Grüße
Chris








7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Ausblenden von Tabellenblättern anhand von Filter
04.03.2024 17:27:53
{Boris}
Hi,

teste mal (noch ohne Sonderlocken):

Sub test()

Dim C As Range
Dim Ws As Worksheet
For Each C In Range("B6:B13").SpecialCells(xlCellTypeVisible)
For Each Ws In ThisWorkbook.Worksheets
If CStr(C) = Left(Ws.Name, 4) Then
Ws.Visible = Not Ws.Visible
End If
Next Ws
Next C
Worksheets("Master").Activate
End Sub


VG, Boris
AW: Ausblenden von Tabellenblättern anhand von Filter
04.03.2024 19:21:21
Chris
Hallo Boris,

danke für den Vorschlag, leider funktioniert das so wohl nicht. Die ausgeblendeten Tabellenblätter stimmen nicht mit dem Filter überein.
Ich bin ja mit der bisherigen Variante relativ nah dran, ich weiß nur nicht warum warum es manchmal stimmt und manchmal nicht - und warum es trotz gleichem Filter bei Mehrfachausführung des Makros zu anderen Ergebnissen kommt.
Viele Grüße
Christian
Anzeige
AW: Ausblenden von Tabellenblättern anhand von Filter
04.03.2024 21:13:29
{Boris}
Hi,

blende erstmal wieder ALLE Blätter ein und lass dann das Makro laufen.

VG, Boris
AW: Ausblenden von Tabellenblättern anhand von Filter
05.03.2024 10:39:39
Zahlendreher
Hallo!

Das Problem besteht darin, dass du zwei Schleifen gleichzeitig hast. Durch die Array-Schleife mit LBound-UBound setzt du einmal das Tabellenblatt auf .Visible = True, um es im Anschluss wieder auf .Visible = False zu setzen.

z. B. 8888 und 9999

In der ersten Array-Schleife ist der Wert 8888
If varArr(8888) = Left(8888, 4) Then
ws(8888).Visible = True

UND HIER DAS PROBLEM
Die zweite Array-Schleife hat jetzt den Wert 9999
If varArr(9999) = Left(8888, 4) Then
...
Else
If ws(8888).Visible = True then ws(8888).Visible = False

Deine Variable ws ist immer noch 8888, aber in der Array-Schleife varArr bist du beim Wert 9999, also setzt du 8888 wieder auf Visible = False. Diese beiden Schleifen laufen unabhängig von einander. Erst wenn die innere Array-Schleife fertig ist, springst du in die nächste (äußere) ws-Schleife.

Lösung: Verwende einfach zwei separate Schleifen, dann ist der Code auch gleich schlanker.

Sub TabellenblätterFiltern()


Dim rngRow As Range
Dim ws As Worksheet
Dim wsArr As Worksheet
Dim varArr() As String
Dim intI As Integer
Dim rngBereich As Range
Set rngBereich = ActiveSheet.Range("B6:E14") 'kann natürlich vorher dynamisch deklariert _
werden, z.B. über usedrange, wenn alle Rahmenbedingungen passen.
intI = 0
'Alle sichtbaren Hauptgruppen in Array schreiben
For Each rngRow In rngBereich.Rows
If rngRow.Hidden = False Then
If Not Trim(rngRow.Cells(1, 1) & vbNullString) = vbNullString Then '// Ergänzung, damit keine Leerwerte im Array drin sind
ReDim Preserve varArr(intI)
varArr(intI) = rngRow.Cells(1, 1)
intI = intI + 1
End If
End If
Next
'Alle Tabellenblätter durchlaufen (Schleife 1) und für jedes Tabellenblatt vergleichen, ob _
der linke Buchstabe des TAbellenblatts mit dem des Eintrags im Array übereinstimmt (2. Schleife)
For Each ws In Worksheets
If Not ws.Name = ActiveSheet.Name Then ws.Visible = False
Next ws

For Each ws In Worksheets(varArr)
ws.Visible = True
Next ws

Sheets("Master").Select

End Sub


Aber wesentlich schlanker geht es mit dem Code von Boris und meiner Adaption:

Sub TabellenblätterFiltern()


Dim C As Range
Dim Ws As Worksheet

For Each Ws In Worksheets
If Not Ws.Name = ActiveSheet.Name Then Ws.Visible = False
Next Ws

For Each C In Range("B6:B13").SpecialCells(xlCellTypeVisible)
For Each Ws In ThisWorkbook.Worksheets
If CStr(C) = Left(Ws.Name, 4) Then
Ws.Visible = Not Ws.Visible
End If
Next Ws
Next C
Worksheets("Master").Activate
End Sub


Beste Grüße
Anzeige
AW: Ausblenden von Tabellenblättern anhand von Filter
05.03.2024 12:56:12
chris
Hallo Zahlendreher,

vielen vielen Dank für die Erklärung und die beiden Optionen. Gerne bestätige ich anschließend noch dass neue Varianten perfekt laufen.
Viele Grüße
Chris
AW: Ausblenden von Tabellenblättern anhand von Filter
04.03.2024 17:59:25
Yal
Hallo Chris,

mit einer Zelle-Formel, kann man die Dateipfad angezeigt bekommen. Daraus baut man eine Power Query Abfrage, die die Liste der Blätter auflistet (in L5). Rechtsklick drauf, aktualisieren. Bei neuen Blätter muss die Untergruppe per Hand gepflegt werden.

Filtere die Untergruppe und rufe das Makro.
https://www.herber.de/bbs/user/167537.xlsm

Code:
Sub TabellenblätterFiltern()

Dim LR As ListRow

For Each LR In Me.ListObjects("tblBlattliste").ListRows
Worksheets(LR.Range(1).Value).Visible = Not LR.Range.EntireRow.Hidden 'Ist der Zeile in der Tabelle versteckt, dann wird das Blatt nicht sichtbar
Next
End Sub


VG
Yal
Anzeige
AW: Ausblenden von Tabellenblättern anhand von Filter
05.03.2024 09:32:18
Herbert Grom
Hallo Chris,

und noch ein Tipp: "Normale" Makros gehören zwingend in ein Standard-Modul (Modul1, etc.) und nicht in "Klassen-Modul" ("Class-Module=Tabelle1, etc.")!!!

Servus

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige