Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Excel vba Autofilter Kriterien auslesen
#1
Hallo zusammen,

hätte da schon wieder eine Frage an Euch.
In einer Tabelle habe ich 30 Spalten mit einem Autofilter in der Zeile 1 versehen und filtere entsprechend verschiedene Daten aus unterschiedlichen Spalten.
Wie könnte man alle gesetzten Filterkriterien aus jedem Filter (Spalte) auslesen und in eine MsgBox oder in das Überwachungsfenster ausgeben?

Mit folgendem Code (aus dem Netz) lassen sich die Filter erstmal alle ausschalten und dann wieder einschalten. Wie kann man den Code erweitern um die Daten zu loggen?

Code:
Public Sub Autofilter()
    Dim arrFilters() As FilterData, rngFilters As Range, bolFilters As Boolean, i As Integer
     
    '#######Einlesen
   
    With Worksheets("Angebote - Genehmigungen")
        If .AutoFilterMode Then
            With .Autofilter
                ReDim arrFilters(1 To .Filters.Count)
               
                For i = 1 To .Filters.Count
                    With .Filters(i)
                        If .On Then
                            arrFilters(i).On = .On
                            arrFilters(i).Count = .Count
                            arrFilters(i).Operator = .Operator
                            arrFilters(i).Criteria1 = .Criteria1
                            If .Count = 2 Then
                                arrFilters(i).Criteria2 = .Criteria2
                            End If
                        End If
                    End With
                Next
            End With
            bolFilters = True
          .AutoFilterMode = False
        End If
       
    End With
   
    '#######Wiederherstellen
   
    If bolFilters Then
        Set rngFilters = Worksheets("Angebote - Genehmigungen").Rows(1)
       
        rngFilters.Autofilter  'Auch setzen, wenn alle On=False?
     
        For i = 1 To UBound(arrFilters)
            With arrFilters(i)
                If .On Then
                    If .Count = 1 Then
                        rngFilters.Autofilter i, .Criteria1
                    Else
                        rngFilters.Autofilter i, .Criteria1, .Operator, .Criteria2
                    End If
                End If
            End With
        Next
    End If
End Sub

Vielleicht könnt Ihr mir da weiterhelfen?
Mit freundlichen Grüßen / Best regards
                          //
----------o00o---°(_)°---o00o----------------------

Erich
Antworten Top
#2
Hallo Erich, :19:

hier eine Möglichkeit: :21:
[attachment=28778]
________
Servus
Case
[-] Folgende(r) 1 Nutzer sagt Danke an Case für diesen Beitrag:
  • sharky51
Antworten Top
#3
Hallo Case,

der Code funktioniert gut in dem genannten Beispiel
Wenn ich den aber in meine Mappe in ein Modul schreibe dann hüpfte das teil gleich auf die Sprungmarke und zeigt "Fehler: 1004 Anwendungs- oder objektdefinierter Fehler"

Ich muss dazu sagen dass in 32 Spalten der Autofilter eingefügt ist.
Die erste Filterung passiert in Spalte 8 und dann wieder in Spalte 32.
Wie kann man da alle Spalten einbeziehen ob Filter gesetzt oder nicht?

Geht das überhaupt mit so vielen Spalten oder habe ich da etwas nicht verstanden?

Vielleicht könntest Du mir das verraten  :92:

Jetzt habe ich in Deinem Beispiel entdeckt dass da der gleiche Fehler kommt wenn nur ein Filter gesetzt ist und der zweite soll alles anzeigen.

Kann man den Fehler abfangen, bzw alle Spalten wo der Filter nicht gesetzt ist ignorieren?
Mit freundlichen Grüßen / Best regards
                          //
----------o00o---°(_)°---o00o----------------------

Erich
Antworten Top
#4
Hi
damit spielt glaub ich jeder mal. :15:

Gruß Elex


Angehängte Dateien
.xlsm   AutoFilter.xlsm (Größe: 24,21 KB / Downloads: 12)
[-] Folgende(r) 1 Nutzer sagt Danke an Elex für diesen Beitrag:
  • sharky51
Antworten Top
#5
(10.01.2020, 21:03)sharky51 schrieb: Kann man den Fehler abfangen, bzw alle Spalten wo der Filter nicht gesetzt ist ignorieren?

Hallo Erich, :19:

mit einer kleinen Prüfung...

Code:
If .On Then

... geht das. :21:

.xlsb   Autofilter_Kriterien_auslesen_pruefen_ob_etwas gefiltert.xlsb (Größe: 17,42 KB / Downloads: 8)
________
Servus
Case
[-] Folgende(r) 1 Nutzer sagt Danke an Case für diesen Beitrag:
  • sharky51
Antworten Top
#6
Hallo Elex,

vielen dank für Dein Beispiel.

Funktioniert alles soweit gut, nur der Übertrag der gefilterten Werte auf die andere Tabelle funktioniert bei mir nicht.
Zumindest bekomme ich die gleiche Filterung die in Deinem Bespiel eingestellt war nicht rekonstruiert.

Hallo Case,

Dir auch ein Dankeschön für das funktionierende Beispiel. Cool!
Könnte man da auch noch die Spalte bzw. Überschrift der Spalte mit ausgeben?
Mit freundlichen Grüßen / Best regards
                          //
----------o00o---°(_)°---o00o----------------------

Erich
Antworten Top
#7
Hallo Erich, :19:

das geht dann so: Dodgy

Entweder Du änderst nur eine Codezeile... Blush

Code:
MsgBox "In Spalte: " & lngFilter & " - Überschrift: " & .Parent.Parent.Cells(1, lngFilter).Value & vbCrLf & strTMP

... oder du nimmst folgendes Beispiel: :21:

.xlsb   Autofilter_Kriterien_auslesen_pruefen_ob_etwas gefiltert_Ausgabe_Spalte_und_Ueberschrift.xlsb (Größe: 18,57 KB / Downloads: 17)
________
Servus
Case
[-] Folgende(r) 2 Nutzer sagen Danke an Case für diesen Beitrag:
  • JereMaia, sharky51
Antworten Top
#8
Hallo Case,

vielen Dank das passt jetzt super.

Wünsche noch eine schönen Sonntag!
Mit freundlichen Grüßen / Best regards
                          //
----------o00o---°(_)°---o00o----------------------

Erich
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste