2016-09-01 4 views
1

Ich versuche, die Filterspalten Benutzern im Bericht anzuzeigen. Excel gibt ein anderes Symbol, aber für große nein. Spalten wird es gut sein, die Spalten in einer anderen Farbe wie blau zu färben.Es ist möglich, AutoFilter als Ereignis aufzufangen?

fand ich Code bei Is there a way to see which filters are active in Excel, other than just the funnel icons?

  • Es funktioniert für mich, aber wie dieser Code fangen ohne Taste
  • Sheetchange und Auswahländerung nicht funktionieren.

Code

Sub test() 
Call markFilter(ActiveSheet) 
End Sub 


Sub markFilter(wks As Worksheet) 

    Dim lFilCol As Long 

    With wks 
     If .AutoFilterMode Then 
      For lFilCol = 1 To .AutoFilter.Filters.Count 

       '/ If filter is applied then mark the header as bold and font color as red 
       If .AutoFilter.Filters(lFilCol).On Then 
        .AutoFilter.Range.Columns(lFilCol).Cells(1, 1).Font.Color = vbRed 
        .AutoFilter.Range.Columns(lFilCol).Cells(1, 1).Font.Bold = True 
       Else 
        '/ No Filter. Column header font normal and black. 
        .AutoFilter.Range.Columns(lFilCol).Cells(1, 1).Font.Color = vbBlack 
        .AutoFilter.Range.Columns(lFilCol).Cells(1, 1).Font.Bold = False 
       End If 
      Next 
     Else 
      '/ No Filter at all. Column header font normal and black. 
      .UsedRange.Rows(1).Font.Color = vbBlack 
      .UsedRange.Rows(1).Font.Bold = False 
     End If 
    End With 
End Sub 

Antwort

4

Ich werde das gleiche Beispiel, das ich in der Antwort verwendet, die Sie in Ihrem Beitrag erwähnt. Ich habe das geantwortet. :)

Es gibt kein Filterwechselereignis in Excel. Eine Problemumgehung, die ich verwenden würde, ist das Einfangen der Berechnungsmethode des Arbeitsblatts oder besser der Arbeitsmappe.

Also, in das Arbeitsblatt mit Filter fügen Sie eine Dummy-Formel wie folgt hinzu: =SUBTOTAL(3,Sheet2!$A$1:$A$100) Dies zählt nur sichtbare Zellen. Aber es liegt an dir. Fühlen Sie sich frei, irgendeine Formel zu verwenden, die auf Filteränderung reagiert.

enter image description here

Danach gehen zu dieser Arbeitsmappe Code und fügen:

Private Sub Workbook_SheetCalculate(ByVal Sh As Object) 
    Call markFilter(Sh) 
    MsgBox "Filter changed" 
End Sub 

Boom. Jetzt fangen Sie die Filterwechselereignisse ab und aktualisieren die gefilterten Spalten, indem Sie den VBA-Code auslösen.

Hinweis markFilter kommt von der answer, die Sie erwähnten.

+0

danken u !!! Ich versuche es. – teddy2

+1

hat es funktioniert. Danke!! – teddy2

+1

Schöne Art, über den Tellerrand hinaus zu denken. – Comintern

0

Die wichtigsten Punkte aus meinem Artikel Trapping a change to a filtered list with VBA

  1. A „dummy“ -Arbeitsblatt hinzugefügt werden mit einer einzigen SUBTOTAL Formel in A1 zeigt zurück auf den Bereich auf dem Hauptblatt gefiltert.
  2. A Worksheet_Calculate() Das Ereignis wird dem Arbeitsblatt "Dummy" hinzugefügt. Dieses Ereignis wird ausgelöst, wenn die Formel SUBTOTAL aktualisiert wird, wenn der Filter geändert wird.

Die nächsten beiden Schritte sind nur erforderlich, wenn es gewünscht wird, die Arbeitsmappe Berechnung als Manual

  1. hinzufügen Workbook_Open Ereignis ausführen, um die EnableCalculation Eigenschaft aller Blätter setzen andere als "Dummy" zu False.
  2. Führen Sie die Arbeitsmappe in Berechnung Modus
Verwandte Themen