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
"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
"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
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
Danke Euch beiden. Leider funktioniert es aber nicht...
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
Ich hab die Datei mal hochgeladen:
http://c30e06g45d.c3.ohost.de/excel/Mappe1.zip
User und Password: excel
michael
Peter Schleif schrieb:
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
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:
"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
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: