Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Autofilter in Abhängigkeit von Zelle steuern?

1,625 views
Skip to first unread message

micheal kretschmann

unread,
Mar 20, 2008, 9:34:23 AM3/20/08
to
hallo,

ich möchte gerne den Filter der Tabellenfunktion unter 2007 in
Abhängigkeit einer bestimmten Zelle steuern.

Angenommen ich auf Blatt Daten die Tabellenfunktion mit Ergebniszeile
eingerichtet.
Auf Blatt Auswertung habe ich in Zelle A1 ein Dropdownfeld angelegt, in
dem ich aus 4 Werten wählen kann.

Der Filter auf Blatt Daten in Spalte A sollte sich nun automatisch auf
den Wert stellen den ich auf Blatt Auswertung im Dropdownfeld ausgewählt
habe.

Geht das, und wenn ja wie?

danke

michael

Melanie Breden

unread,
Mar 20, 2008, 1:21:24 PM3/20/08
to
Hallo Michael,

"micheal kretschmann" schrieb:

speicher folgende Prozedur im Codemodul der Tabelle "Auswertung":

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(0, 0) <> "A1" Then Exit Sub

Worksheets("Daten").Rows(1).AutoFilter Field:=1, _
Criteria1:=Range("A1").Value
End Sub

Die Prozedur wird automatisch ausgeführt, wenn der Wert in A1 geändert wird.


Mit freundlichen Grüssen
Melanie Breden

--
- Microsoft MVP für Excel -
www.melanie-breden.de
Das Excel-VBA Codebook 2007 http://tinyurl.com/2nwvod

Message has been deleted

Melanie Breden

unread,
Mar 20, 2008, 2:42:57 PM3/20/08
to
Hallo Peter,

"Peter Schleif" schrieb:


> Melanie Breden schrieb am 20.03.2008 18:21:
>>
>> Worksheets("Daten").Rows(1).AutoFilter Field:=1, _

> ^^^^^^^^
> .Columns(1)

warum ohne ein paar nette Worte ;-)

Da ich davon ausgehe, dass die Autofilter in *Zeile* 1 gesetzt sind,
verwende ich die *Rows*-Eigenschaft:

Worksheets("Daten").Rows(1).AutoFilter Field:=1, _
Criteria1:=Range("A1").Value

Peter Schleif

unread,
Mar 21, 2008, 2:12:36 AM3/21/08
to
Melanie Breden schrieb am 20.03.2008 19:42:
> "Peter Schleif" schrieb:
>> Melanie Breden schrieb am 20.03.2008 18:21:
>>>
>>> Worksheets("Daten").Rows(1).AutoFilter Field:=1, _
>> ^^^^^^^^
>> .Columns(1)
>
> warum ohne ein paar nette Worte ;-)

Das war unhöflich. Bitte entschuldige. Ich hatte das Posting auch
zurückgezogen, aber offenbar zu spät. Man sollte halt nicht
gleichzeitig mailen und posten. Womit mal wieder bewiesen wäre, dass
wir nicht zwei Dinge gleichzeitig tun können. :-)


> Da ich davon ausgehe, dass die Autofilter in *Zeile* 1 gesetzt sind,
> verwende ich die *Rows*-Eigenschaft:

Ich hatte deinen Code tatsächlich ohne AutoFilter getestet und dann
funktionierte es leider nicht. Der Autofilter hat dann nur nicht nicht
gefiltert, sondern ließ sich auch nicht mehr bedienen. Wenn er aber
schon gesetzt ist, funktioniert es. Zwar könnte man das durch einen
zweiten Befehl sicher stellen ...

Worksheets("Daten").Rows(1).AutoFilter
Worksheets("Daten").Rows(1).AutoFilter Field:=1, Criteria...

... trotzdem würde ich von Rows abraten. Begründung: Mal abgesehen von
dem konkreten Beispiel des OP - wie würdest Du deinen Code ändern,
wenn in Spalte B gefiltert werden soll? Vermutlich

A1 -> B1 und Field:=1 -> Field:=2

Das führt aber u.U. zu Problemen. Wenn Spalte A komplett leer ist,
kann es passieren, dass der Autofilter erst in Spalte B beginnt.
Field:=2 greift dann nicht auf Spalte B sondern auf C zu. Wenn in der
Tabelle nur Spalte B belegt ist, kommt sogar ein Fehler. Mit
Columns(2).AutoFilter Field:=1 lässt sich das vermeiden. Zumindest bei
vorher nicht gesetztem AutoFilter kann man so sicher und gezielt in
Spalte B filtern. Und man muss ihn auch nicht erst separat einschalten.

Fazit: Man sollte IMHO immer prüfen, ob schon ein Autofilter gesetzt
ist. Wenn man den verändern will, muss man Field auf jeden Fall
relativ zu AutoFilter.Range.Column angeben (Ausnahme Spalte A wie beim
OP). Ist hingegen noch kein Filter gesetzt, ist man mit Columns auf
der sicheren Seite, während man mit Rows auch dann noch prüfen muss,
wo der Filter wirklich beginnt. Deshalb ziehe ich Columns vor.

Nun ja. Soviel zum AutoFilter. Bitte entschuldige nochmal, das
verkürzte erste Posting. War nicht böse gemeint.


Peter

michael kretschmann

unread,
Mar 21, 2008, 2:55:50 PM3/21/08
to
micheal kretschmann schrieb:


Danke Euch beiden. Leider funktioniert es aber nicht...

Peter Schleif

unread,
Mar 22, 2008, 2:33:44 AM3/22/08
to
michael kretschmann schrieb am 21.03.2008 19:55:
>>
>> Auf Blatt Auswertung habe ich in Zelle A1 ein Dropdownfeld angelegt, in
>> dem ich aus 4 Werten wählen kann.

Wie hast Du denn dieses Dropdownfeld angelegt?

- Hast Du die Gültigkeitprüfung für A1 aktiviert und
dort eine Liste angegeben?

- Oder hast Du manuell über die Steuerlement-Toolbox
ein "echtes" Dropdownfeld über der Zelle A1 eingefügt?

Im ersten Fall sollte Melanies Code funktionieren - vielleicht den
Autofilter noch mal rausnehmen und manuell neu anlegen (vgl:
Problematik des Codes bei nicht angelegtem Filter in meinem Posting an M.)

Im zweiten Fall brauchst Du zusätzlichen Code, der auf die Änderung
des Dropdown reagiert. Gehe hierzu nochmal in den Entwurfsmodus.
Rechtsklick auf das Dropdown -> "Code anzeigen". Im VBA-Editor
solltest Du jetzt eine Prozedur "ComboBox1_Change()" sehen. Der Name
ComboBox1 kann natürlich variieren. Hier trägst Du nun Melanies leicht
veränderten Code ein:

'Name der Combobox beide Male anpassen!!!

Private Sub ComboBox1_Change()
Worksheets("Daten").Rows(1).AutoFilter _
Field:=1, Criteria1:=Me.ComboBox1.Value
End Sub

Auch hier solltest Du den Autofilter vorsichtshabler nochmal entfernen
und manuell in der kompletten Zeile 1 anlegen.

Peter

michael kretschmann

unread,
Mar 22, 2008, 8:16:41 AM3/22/08
to
Also ich habs jetzt nochmal probiert, funktioniert leider aber nicht.
Vielleicht stehe ich aber auch auf dem Schlauch:)

Ich hab die Datei mal hochgeladen:

http://c30e06g45d.c3.ohost.de/excel/Mappe1.zip
User und Password: excel

michael


Peter Schleif schrieb:

Peter Schleif

unread,
Mar 22, 2008, 8:29:28 AM3/22/08
to
michael kretschmann schrieb am 22.03.2008 13:16:
> Also ich habs jetzt nochmal probiert, funktioniert leider aber nicht.
> Vielleicht stehe ich aber auch auf dem Schlauch:)
>
> Ich hab die Datei mal hochgeladen:
>
> http://c30e06g45d.c3.ohost.de/excel/Mappe1.zip
> User und Password: excel

Melanies Original-Code muss in das Codemodul der Tabelle "Auswertung"
und nicht in ein eigenes Modul ("Modul1")

Ansonsten sollte das passen, wenn Du vorher in der Tabelle "Daten" den
Autofilter manuell auf Zeile 1 setzt, wovon Melanie ja ausgegangen war.

Peter

michael kretschmann

unread,
Mar 22, 2008, 5:25:48 PM3/22/08
to
Hallo Peter,

ich bin dahinter gekommen was nicht gestimmt hat: Es funktioniert nur
bei Autofilter. Ich habe die ganze Sache aber eigentlich in Verbindung
der Tabellenfunktion (bei der man auch Filtern kann) machen wollen...

danke

michael


Peter Schleif schrieb:

Melanie Breden

unread,
Mar 24, 2008, 2:59:02 AM3/24/08
to
Hallo Michael,

"michael kretschmann" schrieb:


> ich bin dahinter gekommen was nicht gestimmt hat: Es funktioniert nur bei
> Autofilter. Ich habe die ganze Sache aber eigentlich in Verbindung der
> Tabellenfunktion (bei der man auch Filtern kann) machen wollen...

dann änder den Code im Codemodul von "Auswertung" wie folgt:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(0, 0) <> "A1" Then Exit Sub

Worksheets("Daten").ListObjects("Tabelle1").Range.AutoFilter Field:=1, _
Criteria1:=Range("A1").Value
End Sub

michael kretschmann

unread,
Mar 26, 2008, 6:54:33 AM3/26/08
to
Danke funktioniert. Hab auch herausgefunden wie ich das ganze mit z.B.
Spalte D filtern kann :)

Was mir nur noch unklar ist: Wie verändere ich die Zelle mit dem
Dropdown, z.B. nicht mir a1 sondern z.B. H1 oder sonst was?

danke michael


Melanie Breden schrieb:

0 new messages