Das Clever-Excel-Forum.de - Treffen
findet vom 15. - 17. September 2017 in Thüringen / Region Großer Inselsberg statt. Hotelbuchung ab sofort möglich.


Filter je Spalte prüfen
#1
Liebe Excelfreaks,

mit folgendem Code prüfe ich je Spalte, ob ein Filter aktiv ist:

Public Function AF_IST_AN(Bereich As Range) As Boolean
With Bereich.Parent
If .AutoFilterMode Then
With .AutoFilter
AF_IST_AN = .Filters(Bereich.Column - .Range.Column + 1).On
End With
End If
End With
End Function
'Diese Funktion wird dann so verwendet: =AF_IST_AN(A$2)

Das funktioniert prima, solange die Filter "von Hand" gesetzt werden. Sobald Makros zum Filtern eingesetzt werden, steht #WERT! in allen Formeln Confused ...Excel 2003 kann es, 2010 nicht Confused: huh:

Ich hoffe, jemand weiß Rat 17 Eine Musterdatei ist im Anhang.

Viele Grüße
Tom


Angehängte Dateien
.xlsm   TEST AF_IST_AN.xlsm (Größe: 16,77 KB / Downloads: 7)
to top
#2
Hallo,

teste mal:

Code:
Sub Makro1()
   Application.Calculation = xlCalculationManual
    Selection.AutoFilter Field:=3, Criteria1:="2"
   Application.Calculation = xlCalculationAutomatic
End Sub

Wenn Berechnung vorher anders gestellt war, dann kann man den zustand vorher auch in eine Variable einlesen und am Ende den ursprünglichen Zustand wieder herstellen.
Gruß Atilla

Excel 2007
to top
#3
Hallo Atilla und @all,

das ist ja interessant, dass UDFs in E2010 nicht so funktionieren wie in E2003,
wenn VBA ins Spiel kommt. Gibt es dafür eine Erklärung bzw. ist das irgendwo dokumentiert?
Oder gibt es in E2010 noch irgendwo anders eine einstellbare Option diesbezüglich?

Gruß Uwe
to top
#4
Hallo Atilla,

danke für die schnelle Antwort 23 Das funzt, aber ich habe eine Monsterdatei mit unendlich vielen Filtercodes Sad ...da bin ich ne Weile beschäftigt bei allen Filtern die Codes zu ergänzen. Das wäre ja wirklich eine Verschlechterung gegenüber Excel 2003 22

Viele Grüße
Tom

Public Function AF_IST_AN(Bereich As Range) As Boolean
With Bereich.Parent
If .AutoFilterMode Then
With .AutoFilter
AF_IST_AN = .Filters(Bereich.Column - .Range.Column + 1).On
End With
End If
End With
End Function
'Diese Funktion wird dann so verwendet: =AF_IST_AN(A$2)k
to top
#5
Hallo zusammen,

Uwe, Du schreibst:
Zitat:das ist ja interessant, dass UDFs in E2010 nicht so funktionieren wie in E2003

Das kann ich nicht beantworten. Ich glaube aber, dass das nicht generell die UDF's betrifft, sondern die, die mit dem Autofilter zu tun haben.

Ich habe mal eine andere UDF genutzt und die arbeitet völlig normal.

Das Filter mit Makrosteuerung ab 2007 anders laufen, konnte ich schon öfter beobachten.
Vor allem dann, wenn nach Zahlen oder Datum gefiltert wird. Manuell gesetzter Filter funktioniert.
Der gleiche Filter aufgezeichnet und ausgeführt funktioniert dann nicht. Da müsste eigentlich Peter Haserodth doch mal was zu schreiben, oder hat er das schon?

Ich habe es jetzt mit Excel 2007 getestet, jetzt müsste mal jemand mit 2013 testen, ob sich das da auch noch so verhält, wie von Tom beschrieben.

Mit dem Abschalten der Berechnung war einfach ein Schuss ins Blau, und hat funktioniert.
Warum weiß ich auch nicht, denn das Calculate Ereignis wird erst nach Durchlauf der UDF angestoßen.
Also findet zu Beginn gar keine Berechnung statt. Ist schon alles etwas komisch. Aber ich bin noch am rummachen hier, Angry mal sehen, ob ich etwas fundierteres beobachten oder erkennen kann
Gruß Atilla

Excel 2007
to top
#6
Hallo Atilla,

danke für Deine Antwort.
Das Thema fing eigentlich hier an. Da hatte ich es leider nicht mit E2010 getestet, weil ich nicht auf die Idee kam, dass es tatsächlich Unterschiede bei den Versionen gibt. Und Peter Haserodt hat sich dazu leider auch nicht geäußert. ;-)
Nun stellte Tom hier die Frage noch einmal mit Datei und ich konnte es nachvollziehen.
Entschuldige bitte, dass ich das nicht ernster genommen hatte, Tom. ?mage
Großer Mist ist das ja schon, wenn bisher funktionierende VBA-Funktionen ausfallen.
Aber Dank Deiner Lösung geht es ja nun auch in E2010, wenn auch leider mit viel Änderungsarbeit.
Oder gibt es vielleicht doch eine versteckte Einstellung, die das beeinflusst?

Gruß Uwe
to top
#7
Hallo zusammen,

ich habe jetzt etwas rumprobiert und habe noch eine alternative Lösung bzw ein Workaround gefunden.

Code zum Setzen und Aufheben des Filters so:

Code:
Sub Makro1()
   Selection.AutoFilter Field:=3, Criteria1:="2"
   ActiveSheet.Calculate
End Sub

Sub Makro2()
    Selection.AutoFilter Field:=3
    ActiveSheet.Calculate
End Sub

Und in der Function kommt ein neuer Befehl hinzu:

Code:
Public Function AF_IST_AN(Bereich As Range) As Boolean
   Application.Volatile
   With Bereich.Parent
      If .AutoFilterMode Then
         With .AutoFilter
            AF_IST_AN = .Filters(Bereich.Column - .Range.Column + 1).On
         End With
      End If
   End With
End Function

Offensichtlich wird beim Setzen oder Aufheben des Filters die Berechnung vor dem Funktionsaufruf angestoßen und danach wird nicht mehr neu berechnet.

Aber warum es mit dem Ein-und Ausschalten der Berechnung auch funktioniert, habe ich trotzdem nicht verstanden.Huh

@Uwe
Zitat:Peter Haserodt hat sich dazu leider auch nicht geäußert. ;-)

Dann stoß ihn mal darauf, dass er sich der Sache mal annimmt. Dann gibt es sicher wieder etwas Spannendes und Witziges zu lesen. Blush
Gruß Atilla

Excel 2007
to top
#8
Hallo zusammen,

nur zum Verstehen...
Was macht denn die Funktion und was wird damit bezweckt?

Gruß
Max
to top
#9
Hallo Atilla,

gerade das Application.Volatile würde ich nicht ins Spiel bringen wollen.
Ich werde Peter demnächst mal auf dieses Thema ansprechen. ?mage

Gruß Uwe
to top
#10
Hallo Max,

gedacht ist/war diese Funktion eigentlich für die Bedingte Formatierung,
um beim AF die gerade aktiven/gefilterten Spalten hervorzuheben.

Gruß Uwe
to top


Möglicherweise verwandte Themen...
Thema Verfasser Antworten Ansichten Letzter Beitrag
  wenn in tabelle wert in spalte dann neue spalte in neuer tabelle merzens 4 85 16.11.2016, 13:44
Letzter Beitrag: schauan
  Filter in Pivot-Tabelle setzen Pat1604 2 73 08.11.2016, 20:39
Letzter Beitrag: Pat1604
  Zellen prüfen und dann addieren h76469 1 50 05.11.2016, 08:53
Letzter Beitrag: WillWissen
  Exceltabelle auf bestimmte Wörter prüfen Frederik 1 51 03.11.2016, 18:55
Letzter Beitrag: steve1da
  Zusammenzählen bei aktivem Filter... cuba 3 55 01.11.2016, 14:50
Letzter Beitrag: cuba
  Filter setzen in Pivot Tabelle NoFear070 3 130 29.09.2016, 13:57
Letzter Beitrag: NoFear070
  Pivot Chart nach Warengruppe und Filter Paschi 4 224 27.09.2016, 12:05
Letzter Beitrag: Rabe
  Wenn Spalte E nicht leer dann Datum in Spalte O VBA BadHabiit 4 225 20.09.2016, 14:49
Letzter Beitrag: BadHabiit
  Funktion -> Nur in Spalte X zählen wenn Y in Spalte Z steht MacTop 18 497 07.09.2016, 13:59
Letzter Beitrag: MacTop
  Filter von Daten und Kopie auf andere Mappe 2Maik2 2 201 12.08.2016, 16:12
Letzter Beitrag: schauan

Gehe zu:


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