Hallo Uwe,
stimmt, das ist so gesehen keine bessere Alternative.
Sollte auch nur ein flüchtiger Hinweis sein.
Ist aber alles sehr komisch, mit der ersten Variante wird die Berechnung abgeschaltet und es funktioniert.
Bei der zweiten Variante wird zum Berechnen animiert und es funktioniert.
Hallo zusammen,
wenn man die Funktion per F9 in der ersten Zeile mal stoppt und dann manuell durchgeht, wird selbige in der Zeile mit den .Filters rekursiv aufgerufen und nach dem insgesamt 4. Durchlauf abgebrochen. Das Makro kommt damit nie zum End Function.
Ursache ist erst mal ein "Nichtobjekt" :s
Wenn man mal in die Überwachung geht, sieht man für Bereich.Parent.AutoFilter --> Nothing. Entsprechend gibt es da auch kein .Filters ...
Mal sehn, woran das liegt ...
Hallo Andre,
Zitat:sieht man für Bereich.Parent.AutoFilter --> Nothing
genau das habe ich auch beobachtet.
Bereich.Parent.AutoFilter = Nothing aber deshalb, weil Bereich leer bleibt.
Also im Grunde Bereich = Nothing
Hallo atilla,
im Bereich gibt er mir eine Zelle auf dem Blatt aus. Ob diese Zelle leer ist, hat mit dem Nothing nichts zu tun. Wenn Du mit dem Makro auslöst, ist es Nothing. Wenn Du manuell auslöst, ist es ein Objekt.
Hallo zusammen,
unabhängig von anderen Vor- oder Nachteilen kann man das Application.Volatile auch durch andere Vorgehensweise weglassen.
Statt
ActiveSheet.Calculate
würde auch
Range("A1:A4").Calculate
oder
Application.CalculateFull
gehen.
Hallo zusammen,
hab jetzt, nach dem ich gestern mit Application.Volatile experementiert habe, eine Lösung die zwar mit einer "flüchtigen" Funktion arbeitet, aber schonender ist als mit Application.Volatile.
In Hilfszellen schreibe ich die Zelladressen der zu überwachenden Filterzellen. In die Funktion wird dann Indirekt eingearbeitet. Unten das Beispiel zeigt es genau:
komisch, wieder kann ich kein Tabellenausschnitt einfügen. Wieder erscheinen zwei Raute ähnliche Zeichen. (in Firefox) Im IE erscheinen zwei auf der Kante stehende Qudrate mit einem Fragezeichen innen.
Dann beschreibe ich es mal.
Ich habe in den Zellen A4: D4 folgende Zelladressen stehen:
Und die Formel in A1 sieht so aus:
=AF_IST_AN(INDIREKT(A4))
Ohne Hilfzellen ginge diese Formel:
=AF_IST_AN(INDIREKT(ADRESSE(6;SPALTE())))
Im Code zum Aufruf oder Aufheben des Filters immer als letzter Befehl:
ActiveSheet.Calculate
So z.B:
Code:
Sub Makro1()
Selection.AutoFilter Field:=3, Criteria1:="2"
ActiveSheet.Calculate
End Sub
Ich habe mal folgendes getestet:
In eine Zelle die Formel =Jetzt() eingetragen. Nach jedem Aufruf der Makros sehe ich, es wird neu berechnet.
Ich habe dann einen Haltepunkt ganz am Anfang der Funktion gesetzt, und konnte nun beobachten, dass sich der Wert der Zelle mit Jetzt() erst nach Durchlauf der Funktion ändert.
Wird manuell gefiltert, dann ändert sich der Wert der Formel Jetzt() und dann erst wird der Haltepunkt im Code angesprungen.
Das mal zur allgemeinen Info.
Hallo André,
hast Du alle 3 Varianten probiert?
Das einzige, was bei mir mit E2010 zum Erfolg führt ist
Application.CalculateFull, was jetzt auch nicht unbedingt der Brüller ist.
Gruß Uwe
(24.11.2014, 19:49)schauan schrieb: [ -> ]Hallo zusammen,
wenn man die Funktion per F9 in der ersten Zeile mal stoppt und dann manuell durchgeht, wird selbige in der Zeile mit den .Filters rekursiv aufgerufen und nach dem insgesamt 4. Durchlauf abgebrochen. Das Makro kommt damit nie zum End Function.
Ursache ist erst mal ein "Nichtobjekt" :s
Wenn man mal in die Überwachung geht, sieht man für Bereich.Parent.AutoFilter --> Nothing. Entsprechend gibt es da auch kein .Filters ...
Mal sehn, woran das liegt ...
Hallo André,
das stimmt so nicht ganz: Die Funktion bricht einfach ab. Da sie in 4 Zellen steht, kommt sie 4 mal.
Das kannst Du so schön sehen:
Code:
Public Function AF_IST_AN(Bereich As Range) As Boolean
On Error GoTo Fehler
With Bereich.Parent
If .AutoFilterMode Then
With .AutoFilter
AF_IST_AN = .Filters(Bereich.Column - .Range.Column + 1).On
End With
End If
End With
Exit Function
Fehler:
MsgBox "Die Funktion ""AF_IST_AN"" in Zelle " & Application.Caller.Address & " lief in einen Fehler!"
End Function
Gruß Uwe
Hallo Uwe,
so meinte ich es auch. Das Range().Calculate habe ich gerade nochmal probiert. Es geht in dem Fall nicht, da hast Du recht. Calculate wirkt nur bei geändeten Basisdaten der Funktion.
Eine alte Naive hätte ich aber noch, bei der die Funktion nicht geändert werden muss. Allerdings muss man da alle Formelstellen programmieren
Code:
Sub Makro1()
Selection.AutoFilter Field:=3, Criteria1:="2"
Range("A1:D1").Formula = Range("A1:D1").Formula
End Sub