2017-07-05 4 views
1

Ich arbeite an einem Excel 2016 VBA-Makro, das einen Filter auf die Überschriftenspalte anwendet. Danach wendet der Benutzer die Filterkriterien an. Ich möchte in VBA in der Lage sein, die Filterkriterien abzurufen, die der Benutzer anwendete, und sie in einem Zeichenfolgenarray zu speichern. Gibt es eine Möglichkeit, auf die Filterkriterien zuzugreifen?Wie bekomme ich Filterkriterien in Excel 2016 mit VBA?

Vielen Dank im Voraus.

+0

https://www.mrexcel.com/forum/excel-questions/333961-capture-autofilter-state.html (verknüpft aus verknüpften Post mmurietta) –

Antwort

1

Ich überprüfte this question und ziemlich kopiert den ersten Teil des Codes, die einzige Sache ist, dass Sie nicht das Feld bekommen, auf das es angewandt wird, das problematisch sein kann.

Dim sht As Worksheet 
Set sht = ActiveSheet 
With sht.AutoFilter 
    With .Filters 
     ReDim filtarr(1 To .Count, 1 To 3) 
     For f = 1 To .Count 
      With .Item(f) 
       If .On Then 
        filtarr(f, 1) = .Criteria1 
        Debug.Print .Criteria1 
        If .Operator Then 
         filtarr(f, 2) = .Operator 
         filtarr(f, 3) = .Criteria2 
         Debug.Print .Operator & ", " & .Criteria2 
        End If 
       End If 
      End With 
     Next f 
    End With 
End With 
+0

(a) „, das Feld, das es angewendet wird, um "- ist nicht durch" sht.AutoFilter.Range.Columns (f) .Column "festlegbar (dh die Spalte im Arbeitsblatt, die' Columns (f) 'des gefilterten Bereichs ist) (b) Der Code muss wenn der Benutzer eine Liste von Werten in einem Feld auswählt und nicht nur ein oder zwei Werte ("Criteria1" ist in diesem Fall ein Variant-Array, auf das man mit 'filtarr (f, 1) (1) ',' filtarr (f, 1) (2) ', usw.) – YowE3K

+0

Vielen Dank für Ihre Antwort. Ich habe jedoch Probleme beim Ausführen der Zeile mit .Filters. Der Fehler ist: "Laufzeitfehler '91': Objektvariable oder Bei Blockvariable nicht gesetzt" –

+0

@MaxTither - Sie müssen zuerst testen, ob 'sht.AutoFilter' nicht' Nothing' ist - wenn kein Autofilter vorhanden ist, dann Sie kann nicht auf seine Eigenschaft 'Filters' zugreifen –

0

der Code würde so sein. Der Code des Feldes ist Zellen (1, f).

Dim sht As Worksheet 
Set sht = ActiveSheet 
With sht.AutoFilter 
    With .Filters 
     ReDim filtarr(1 To .Count, 1 To 4) ' change array 
     For f = 1 To .Count 
      With .Item(f) 
       If .On Then 
        filtarr(f, 1) = .Criteria1 
        filtarr(f, 4) = Cells(1, f) 'field 
        Debug.Print .Criteria1, Cells(1, f) 
        If .Operator Then 
         filtarr(f, 2) = .Operator 
         filtarr(f, 3) = .Criteria2 

         Debug.Print .Operator & ", " & .Criteria2 
        End If 
       End If 
      End With 
     Next f 
    End With 
End With 
Verwandte Themen