Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1412to1416
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

Hervorheben gesetzter Autofilter

Hervorheben gesetzter Autofilter
16.03.2015 07:18:42
Wolfgang_HB
Guten Tag, liebe Excellenzen :-)
Ich arbeite gemeinsam mit einigen Kollegen mit großen Excellisten und Pivot-Tabellen.
Diese Dateien enthalten oft Autofilter. Einige dieser Filter sind gewollte, notwendige Voreinstellungen und sollen nicht verändert werden.
(Ein generelles Zurücksetzen ALLER Filter ist mir bekannt, scheidet aber aus)
Aber oft stellt man nach der mühsamen Suche in einer großen Datei fest, daß irgendein schusseliger Kollege einen Filter gesetzt und die Datei im gefilterten Zustand abgespeichert hat. Die „bordeigene“ Kennzeichnung eines gesetzten Filters ist meines Erachtens viel zu unauffällig.
Ich suche daher für Excel2007 eine Art Prüfungsabfrage, ob und wo in einer Liste Autofilter gesetzt wurden, beispielsweise das farbige Markieren einer Spalte oder des Spaltenkopfes, wenn Jemand hier Werte ausgeblendet hat.
Die Ansätze hierfür, die ich bisher gefunden habe, setzen immer Voreinstellungen über Worksheet.Calculate oder eine bedingte Formatierung voraus. Da ich diese Dateien aber nicht entsprechend bearbeiten darf, suche ich eine Möglichkeit,
„von außen“, also z.B. über einen Commandbutton in der Symbolleiste das jeweils aktive Arbeitsblatt zu „untersuchen“.
Ich bedanke mich für Lösungsvorschläge !
Gruß
Wolfgang_HB

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Verschiedene Ansätze möglich...
16.03.2015 12:21:56
Michael
Hallo Wolfgang!
Puh, gar nicht einfach, musste hier selbst einiges recherchieren und basteln; allerdings sei mir der Hinweis erlaubt, dass Tante Google hier sehr viel Brauchbares anbietet, aber auch in der Entwicklerreferenz zu Excel wird man fündig.
Ein Ansatz über benutzerdefinierte Funktion: http://www.ozgrid.com/VBA/autofilter-criteria.htm
Oder ein Makro, das ich aus o.a. Funktion abgeleitet habe, das Dir anzeigt in welcher Spalte Filter gesetzt sind - optional können hier auch die Spaltenüberschriften (gelb) markiert werden, die gesetzten Filterkriterien werden aber nicht mitausgegeben:
Sub SindFilterImBlatt()
Dim Liste As Range
Dim SpaltenKopf As Object
Dim fListe As String
Dim i As Integer
Dim Markierung As Byte
If ActiveSheet.FilterMode = False Then Exit Sub
Set Liste = ActiveSheet.Range(Cells(3, 1), Cells(3, 1).End(xlToRight))
i = 1
For Each SpaltenKopf In Liste
If SpaltenKopf.Parent.AutoFilter.Filters(i).On Then
fListe = fListe & "Filter in Spalte " & SpaltenKopf.Column & " " & _
"""" & SpaltenKopf.Text & """" & vbCrLf
'SpaltenKopf.Interior.Color = vbYellow 'Optional
End If
i = i + 1
Next
MsgBox fListe, vbCritical, "Filter im aktiven Blatt"
End Sub
Das Makro kannst Du natürlich mit einer Schaltfläche oder bei Öffnen der Arbeitsmappe aufrufen.
Kannst Du damit was anfangen?
Michael

Anzeige
Ergänzung/Errata zu meinem vorigen Beitrag...
16.03.2015 12:40:11
Michael
Hallo Wolfgang!
Was Du im o.a. Code v.a. noch anpassen musst ist diese Zeile
Set Liste = ActiveSheet.Range(Cells(3, 1), Cells(3, 1).End(xlToRight))

Die bezieht sich uU auf eine falsche Zelle (und zwar ab A3, was nur in meinem Test so war)... also entsprechend anpassen auf jene Zelle, die die erste Spaltenüberschrift Deiner Liste enthält, für A1 wäre das
Set Liste = ActiveSheet.Range(Cells(1, 1), Cells(1, 1).End(xlToRight))

Lg
Michael

AW: Ergänzung/Errata zu meinem vorigen Beitrag...
16.03.2015 18:06:10
Daniel
Hi
hier die Idee von Michael mal etwas vereinfacht:
Dim i As Long
With ActiveSheet.AutoFilter
For i = 1 To .Range.Columns.Count
If .Filters(i).On Then
.Range.Cells(1, i).Interior.Color = vbGreen
Else
.Range.Cells(1, i).Interior.Color = RGB(200, 200, 200)
End If
Next
End With
du kannst diesem Code einem Button zuweisen, um dir die Autofilterspalten anzeigen zu lassen.
(überschrift wird in gefilterten Spalten grün, in den anderen grau)
wenns automatsich gehen soll, kannst du das so leicht automatisieren:
1. Schreibe den Code in Calculate-Event des Tabellenblatts
2. platziere auf dem Blatt eine Formel in der Art: =Teilergebnis(3;A:A)
durch die Teilergebnisfunktion wir bei einer Änderung des Filters das Calculate-Event aufgerufen.
Generell würde ich aber eher ein Makro schreiben, welches zuerst den Filter vollständig zurücksetzt und dann den Standardfilterzustand wieder herstellt, und dieses Makro dann einem Button zuweisen (oder dies automatisch im Open-Event des Workbooks ausführen lassen).
Dann muss sich niemand die Standardfilterung merken und kann sie mit einem Klick wieder herstellen.
Gruß Daniel

Anzeige
Hervorheben von Autofiltern - nahezu gelöst :-)
16.03.2015 18:48:06
Autofiltern
Hallo Michael und Daniel !
Vielen Dank für Eure Beiträge. Beide Ansätze funktionieren problemlos in einer eben erstellten
Test-Excelliste. Offenbar leider nicht in Pivot-Tabellen, mit denen ich auch viel arbeite,
aber vielleicht läßt sich das ja noch irgendwie anpassen...?
Michael, Du hast recht, daß Google und Recherche viel hergeben, aber wenn man nicht so ganz der
Crack ist, stellt man vielleicht einfach die falschen Fragen oder sucht stundenlang und findet nur ähnliche Lösungsansätze oder Tipps für andere Excel-Versionen. Hier im Forum hat man wenigstens die Möglichkeit, seine Vorstellung klar darzustellen und so sind Eure Tipps (fast) zu 100% was ich gesucht hatte. Ich bin ja schon froh, wenn ich irgendwelche Codes bei mir zum Laufen kriege mit meinem zusammengesuchten Halbwissen. :-)
Aber jede Bastelei steigert das persönliche Können...das ist wie beim Kuchen backen :-)
Vielen Dank nochmal an Beide und einen schönen Abend !
Gruß
Wolfgang_HB

Anzeige
AW: Beispieldatei ?
16.03.2015 19:02:54
Daniel
Hi
kannst du uns mal eine deiner Pivottabellen, in der das ganze laufen soll, zur verfügung stellen?
Gruß Daniel

AW: Beispieldatei ?
16.03.2015 19:42:12
Wolfgang_HB
Hallo Daniel !
Danke, daß Du mal drüberschauen möchtest.
Auf die Schnelle zuhause zusammengebastelt:
Eine Datei mit einer Excelliste und einer darauf basierenden Pivot-Tabelle.
Mit solchen Dateien (natürlich umfangreicher) arbeite ich ständig...
...und ärgere mich ständig über gesetzte Filter an den unmöglichsten Stellen :-)
https://www.herber.de/bbs/user/96408.xlsm
Gruß
Wolfgang_HB

Anzeige
Eine Möglichkeit für PivotTabellen...
17.03.2015 09:54:36
Michael
Hallo Wolfgang, Hallo Daniel!
@ Wolfgang: So streng hab ich meinen Kommentar bzgl. Google gar nicht gemeint, war eher ein Hinweis :-). UND: PivotTabellen sind wesentlich komplexer als der AutoFilter - hier _muss_ ein anderer Code greifen bzw. zum Einsatz kommen.
Hier eine erste Möglichkeit für Pivottabellen von mir; Makro zeigt an in welchen PivotFeldern aktuell gefiltert ist:
Sub PivotFilter()
Dim pvtFeld As PivotField
Dim Warnung As String
Dim Info As String
For Each pvtFeld In Tabelle2.PivotTables(Tabelle2.PivotTables.Count).PivotFields
If pvtFeld.AllItemsVisible = False Then
Warnung = Warnung & pvtFeld.Name & vbCrLf
End If
Next
Select Case Warnung
Case Is = ""
Exit Sub
Case Else
Info = MsgBox("Filter in den Feldern: " & vbCrLf & vbCrLf & Warnung, _
vbInformation, "Filter-Check")
End Select
End Sub
Das entsprechende Feld zu färben bringe ich momentan noch nicht hin - evtl. kann ich nachliefern.
LG
Michael

Anzeige
Und weiter gehts: PivotFelder färben...
17.03.2015 10:24:59
Michael
Nochmals Hallo!
Nachfolgend eine Möglichkeit die Berichtsfelder einer PivotTabelle gelb zu füllen, wenn darin ein Filter gesetzt wurde:
Sub PivotFilterFelderMarkieren()
Dim pvtFeld As PivotField
For Each pvtFeld In Tabelle2.PivotTables(Tabelle2.PivotTables.Count).PivotFields
If pvtFeld.AllItemsVisible = False Then
pvtFeld.LabelRange.Interior.Color = vbYellow
End If
Next
End Sub
Klappt's?
LG
Michael

Und jetzt noch die Synthese...
17.03.2015 10:49:11
Michael
Hallo Wolfgang, Hallo Daniel!
Da Wolfgang ja geschrieben hat, dass er sowohl mit AutoFilter-Listen als auch PivotTabellen arbeitet, habe ich versucht die bisherigen Codes in einen zu integrieren; somit könntest Du, Wolfgang, mit nur einem Makro arbeiten, dass sich an das jeweils aktive Arbeitsblatt anpasst und Dir die Filterungen entsprechend kennzeichnet:
Sub FilterAllerKlassenVereinigt()
Dim i As Long
Dim pvtFeld As PivotField
Dim cntAuto As Integer
Dim cntPivot As Integer
cntAuto = ActiveSheet.AutoFilterMode
cntPivot = ActiveSheet.PivotTables.Count
If cntAuto = True Then
GoTo BeiAutoFilter
ElseIf cntPivot > 0 Then
GoTo BeiPivotFilter
Else
GoTo OhneFilter
End If
BeiAutoFilter:
'Daniels Code
With ActiveSheet.AutoFilter
For i = 1 To .Range.Columns.Count
If .Filters(i).On Then
.Range.Cells(1, i).Interior.Color = vbGreen
Else
.Range.Cells(1, i).Interior.Color = RGB(200, 200, 200)
End If
Next
End With
Exit Sub
BeiPivotFilter:
'Michaels Pivot-Code
For Each pvtFeld In ActiveSheet.PivotTables(ActiveSheet.PivotTables.Count).PivotFields
If pvtFeld.AllItemsVisible = False Then
pvtFeld.LabelRange.Interior.Color = vbGreen
End If
Next
Exit Sub
OhneFilter:
End Sub
Das Makro checkt zunächst ob ein Autofilter vorliegt, wenn nicht ob mindestens eine PivotTabelle im aktiven Blatt ist - trifft beides nicht zu, wird die Routine verlassen. Achtung: Ich bin davon ausgegangen, dass Du in Deinen Blättern entweder eine AutoFilter-Liste hast _oder_ PivotTabellen - wenn beides zutrifft arbeitet das Makro nicht richtig.
Ist aber auch nur als Beispiel gedacht - Daniels Anmerkungen bzgl. Filter auf Standardwert zurücksetzen kann ich inhaltlich unterstützen.
So, mehr hab ich nicht ;-).
LG
Michael

Anzeige
Danke, Danke !
17.03.2015 13:21:15
Wolfgang_HB
Hallo Michael und Daniel !
Ich bin begeistert. Vielen, vielen Dank für die Mühe und die Zeit, die Ihr investiert habt,
um mir zu helfen ! Hab gerade in der Mittagspause einen kleinen Testlauf gestartet.
Der Code wird mir sehr weiterhelfen. In der Pivot-Tabelle wird entgegen der Excel-Liste die
Farbe nicht wieder zurückgesetzt, wenn der Filter deaktiviert wird, aber das (hoffe ich) kann
ich mir noch zurechtpfriemeln :-)
@Michael: Ich habe Deinen Hinweis bzgl. Google auch nicht negativ aufgefasst.
Als kaufmännischer Angestellter nutze ich VBA durch learning by doing oder eben Recherche und Nachfrage in solchen Foren. Es ergeben sich Aufgabenstellungen im Tagesgeschäft und ich versuche eine Lösung zu finden. Bei meinem mangelhaften mathematischem Verständnis wären dicke Wälzer zu Code-Programmmierungen oder Kurse rausgeschmissenes Geld :-)
Aber wenn ich so unsere Azubis sehe, die gerade mal wissen, wie man eine Exceldatei unfallfrei öffnet, habe ich offensichtlich doch schon eine Menge aufgeschnappt. Doch manchmal hilft auch stundenlanges
Suchen nicht weiter. Daher finde ich dieses Forum als "letzten Rettungsanker" ja auch so klasse !
Einen schönen Tag noch :-)
Lieben Gruß
Wolfgang_HB

Anzeige
Nochmals ergänzt: Farbe in Pivot zurücksetzen...
17.03.2015 13:42:26
Michael
Hallo Wolfgang!
Danke für Deine nette Rückmeldung; ich habe Dir den Code nochmals angepasst, damit auch in PivotTabellen die Feldfarbe zurückgesetzt wird, wenn der Filter entfernt ist:
Sub FilterAllerKlassenVereinigt()
Dim i As Long
Dim pvtFeld As PivotField
Dim cntAuto As Integer
Dim cntPivot As Integer
cntAuto = ActiveSheet.AutoFilterMode
cntPivot = ActiveSheet.PivotTables.Count
If cntAuto = True Then
GoTo BeiAutoFilter
ElseIf cntPivot > 0 Then
GoTo BeiPivotFilter
Else
GoTo OhneFilter
End If
BeiAutoFilter:
'Daniels Code
With ActiveSheet.AutoFilter
For i = 1 To .Range.Columns.Count
If .Filters(i).On Then
.Range.Cells(1, i).Interior.Color = vbGreen
Else
.Range.Cells(1, i).Interior.Color = RGB(200, 200, 200)
End If
Next
End With
Exit Sub
BeiPivotFilter:
'Michaels Pivot-Code
For Each pvtFeld In ActiveSheet.PivotTables(ActiveSheet.PivotTables.Count).PivotFields
On Error Resume Next
Select Case pvtFeld.AllItemsVisible
Case Is = True
pvtFeld.LabelRange.Interior.ColorIndex = -4142
Case Is = False
pvtFeld.LabelRange.Interior.Color = vbGreen
End Select
Next
Exit Sub
OhneFilter:
End Sub
Dir auch einen schönen Tag!
Michael

Anzeige
Hervorheben von Autofiltern - nahezu gelöst :-)
16.03.2015 18:48:41
Autofiltern
Hallo Michael und Daniel !
Vielen Dank für Eure Beiträge. Beide Ansätze funktionieren problemlos in einer eben erstellten
Test-Excelliste. Offenbar leider nicht in Pivot-Tabellen, mit denen ich auch viel arbeite,
aber vielleicht läßt sich das ja noch irgendwie anpassen...?
Michael, Du hast recht, daß Google und Recherche viel hergeben, aber wenn man nicht so ganz der
Crack ist, stellt man vielleicht einfach die falschen Fragen oder sucht stundenlang und findet nur ähnliche Lösungsansätze oder Tipps für andere Excel-Versionen. Hier im Forum hat man wenigstens die Möglichkeit, seine Vorstellung klar darzustellen und so sind Eure Tipps (fast) zu 100% was ich gesucht hatte. Ich bin ja schon froh, wenn ich irgendwelche Codes bei mir zum Laufen kriege mit meinem zusammengesuchten Halbwissen. :-)
Aber jede Bastelei steigert das persönliche Können...das ist wie beim Kuchen backen :-)
Vielen Dank nochmal an Beide und einen schönen Abend !
Gruß
Wolfgang_HB
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige