Thursday, September 21, 2006

Excel und Autofilter mit VBA

Ziemlich schräg daher kommt bei Excel die Verwendung eines Autofilters von VBA aus. Oder ist es eigentlich ganz einfach, und nur die Hilfe ist (wie so oft) eine Katastrophe?

Es gibt nämlich:
  • diesen Autofilter, laut Hilfe:

    Die AutoFilter-Eigenschaft (des Worksheets) gibt ein AutoFilter-Objekt zurück.


    Gibt ein AutoFilter-Objekt zurück, sofern die Filterung aktiviert ist. Ist keine Filterung aktiv, wird Nothing zurückgegeben. Schreibgeschützt.
    Hinweise
    Zum Erstellen eines AutoFilter-Objekts für ein Arbeitsblatt müssen Sie die automatische Filterung für einen Bereich in dem Arbeitsblatt entweder manuell oder mit Hilfe der AutoFilter-Methode des Range-Objekts aktivieren.

  • und diesen Autofilter:

    AutoFilter-Methode (des Range-Objekts)

    Ausdruck.AutoFilter(Field, Criteria1, Operator, Criteria2, VisibleDropDown)

    Filtert eine Liste unter Verwendung von AutoFilter. Variant.

    Anmerkung Weisen Sie die AutoFilter-Eigenschaft einem Worksheet-Objekt zu, um ein AutoFilter-Objekt zurückzugeben.

    Was? Ich soll die Eigenschaft einem Objekt zuweisen, um etwas zurückzugeben? Oder vielleicht doch das Objekt der Autofilter-Eigenschaft?? Aber die ist doch schreibgeschützt (siehe oben)???

    Anmerkung
    Wenn keine Argumente angegeben werden, schaltet diese Methode lediglich die Anzeige der Dropdownpfeile von AutoFilter im angegebenen Bereich um.

    Was? Noch ne Anmerkung? Keine Argumente angeben? Also, quasi "range(...).autofilter"? Wieso schreiben die so dämlich, dass "lediglich die Anzeige der Dropdownpfeile" umgeschaltet wird? Wird der Autofilter selber da nicht ein- und ausgeschaltet?

  • und das AutoFilter-Objekt selber:

    Verwenden des AutoFilter-Objekts

    Verwenden Sie die AutoFilter-Eigenschaft, um das AutoFilterObjekt zurückzugeben.
    (...)
    Zum Erstellen eines AutoFilter-Objekts für ein Arbeitsblatt, müssen Sie die automatische Filterung für einen Bereich in dem Arbeitsblatt entweder manuell oder mit Hilfe der AutoFilter-Methode des Range-Objekts aktivieren.

    Die Erklärung hatten wir doch schon mal, oder?

  • und das gibt es auch noch:

    AutoFilterMode-Eigenschaft (des Worksheet-Objekts)

    True, wenn die Dropdownpfeile für AutoFilter momentan im Blatt angezeigt werden. Diese Eigenschaft ist von der FilterMode-Eigenschaft unabhängig. Boolean-Wert mit Lese-/Schreibzugriff.

    Hinweise
    Diese Eigenschaft hat den Wert True, wenn die Dropdownpfeile momentan angezeigt werden. Sie können diese Eigenschaft auf False setzen, um die Pfeile zu entfernen, jedoch nicht auf True, um sie einzublenden. Verwenden Sie hierzu die AutoFilter-Methode, mit deren Hilfe Sie eine Liste filtern und sich somit die Dropdownpfeile anzeigen lassen können.

    Was? Man kann die Eigenschaft auf False, dann aber nicht mehr auf True setzen? Ach, da soll man wieder mit der AutoFilter-Methode...?

  • Hilfe!!
Mich hat das verwirrt. Dass das Worksheet einen Autofilter (Eigenschaft!) und das Range-Objekt einen Autofilter (Methode!) hat, wobei die Methode ohne Parameter (range("b2:d2").autofilter) für b2:d2 einen Autofilter setzt (aber auch ausschaltet, wenn einer aktiv ist...), aber auch so funktioniert, dass bei range("a1:z5000").autofilter die ersten Zellen mit Inhalt für den Autofilter sucht (Automatismus!), dass mit der gleichen Methode (mit Parametern verwendet) aber auch Kriterien für die einzelnen Filter gesetzt werden können (activesheet.Cells.AutoFilter field:=3, visibledropdown:=False), die mit der Filters-Auflistung des Autofilter-Objekts des Worksheet-Objekts dann nur lesend angesprochen werden können (debug.print range(...).autofilter.filters(3).criteria1). Sehr, sehr eigenartig das alles!

No comments: