Filter je Spalte prüfen
#11
Hallo Uwe,

stimmt, das ist so gesehen keine bessere Alternative.
Sollte auch nur ein flüchtiger Hinweis sein. Wink

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.
Gruß Atilla
Top
#12
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 ...
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#13
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
Gruß Atilla
Top
#14
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.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#15
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.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#16
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:
Code:
A6    B6    C6    D6

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.
Gruß Atilla
Top
#17
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. Wink

Gruß Uwe
Top
#18
(24.11.2014, 20: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
Top
#19
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 Dodgy

Code:
Sub Makro1()
   Selection.AutoFilter Field:=3, Criteria1:="2"
   Range("A1:D1").Formula = Range("A1:D1").Formula
End Sub
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top


Gehe zu:


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