PDA

Vollständige Version anzeigen : ComboBoxen sollen Listbox filtern


Suwarin
18.04.2009, 20:39
Hallo zusammen,

ich hänge bei dem versuch eine listbox (terminübersicht) mittels comboboxen zu filtern. Ausgehend von CB1 (datum), CB2 und CB3 sollen dann das ergebnis des datums in gegenseitiger abhängigkeit weiter filtern. Wechsel von CB1(datum) muss CB2 und cb3 zurücksetzen.

Hoffe wiedermal auf eure hilfe...

MfG

jinx
19.04.2009, 08:37
Moin, Suwarin,

mit der von Dir gewählten Vorgehensweise, der Listbox im Activate-Ereignis der UF eine RowSource fest zuzuweisen, meines Wissens nicht möglich. Als Alternative wäre die Verwendung einer Hilfstabelle möglich, in der die Daten mit dem Spezialfilter in einen Ausgabebereich eingelesen werden und dieser Bereich dann als RowSource zugewiesen wird.

Anmerkung: da bei mir Option Explicit im Kopf der Prozedur steht, solltest Du vielleicht einmal im gesamten Code in der VBE über Debuggen Kompilieren von VBAProject aufrufen bzw. Deine dimensionierten Variablen prüfen, ob sie denn überhaupt eingesetzt werden. Mir wird da z. B. die Variable klick als nicht vereinbart ausgeworfen...

Suwarin
19.04.2009, 11:16
Hallo jinx,

danke für deine antwort, werd ich mal ausprobieren...

MfG

jinx
19.04.2009, 11:49
Moin, Suwarin,

wenn Du den Weg über eine Hilfstabelle gehen willst, stelle bitte sicher, dass beim Schließen/Öffnen der Mappe der gesamte Datenbestand in die Tabelle eingelesen wird.

Die Frage nach dem Rücksetzen derr CBs ist nicht beantwortet worden - solange hinter den anderen CBs nicht auch das Change_Ereignis eingesetzt wird, reicht es aus, eine Zuweisung in der Art CB2.Value = "" zu verwenden. Wird das Change_Ereignis verwendet, sollte eine globale Variable ins Spiel kommen, um das Ereignis nur bei einer direkten Anwahl ausführen zu lassen. Eine Lösung dürfte analog zu der Umsetzung des Aufrufes der Terminänderung vorgenommen werden. Solltest Du mit der Umsetzung Probleme haben - ich weiß, dass die Ausführungen gerade für Anfänger im Bereich von VBA sehr "kryptisch" sind: bitte melden: wäre doch gelacht, wenn wir gemeinsam das Problem nicht lösen würden... ;)

Suwarin
20.04.2009, 00:44
Hallo Jinx,

jau Probleme hab ich wohl...
mit Hilftabellen wird das alles zu träge (zu viele Zeilen).
hab die CB's nochmal neu über den Inhalt der Listboxen gefüllt. Ich bin aber leider nicht in der Lage die gefundenen Codes auf meine Bedürfnisse anzupassen. Vielleicht kannst du mir über die kleineren Variente "Uform" einen Lösungsweg aufzeigen.

MfG

jinx
20.04.2009, 14:11
Moin, Suwarin,

auch bei Deinem abgespeckten Beispiel gilt die Aussage meiner ersten Antwort:
mit der von Dir gewählten Vorgehensweise, der Listbox im Activate-Ereignis der UF eine RowSource fest zuzuweisen, meines Wissens nicht möglich.

Suwarin
20.04.2009, 20:29
Hallo Jinx,

nächster versuch...(Uform)

MfG

Suwarin
20.04.2009, 21:11
Uuuups, falscher Anhang...Nu aber, hoffe damit kann man jetzt was anfangen...

MfG

jinx
21.04.2009, 08:02
Moin, Suwarin,

hinter die UserForm UForm:

Private Sub UJahr_Change()

Dim Daten(0 To 500, 5) As Variant
Dim i As Long
Dim lngCounter As Long

lngCounter = -1
With ListBoxU
'Leeren der Listbox
.Clear
For i = 2 To Cells(Rows.Count, 5).End(xlUp).Row
'Prüfen, ob der Wert des Urlaubsjahres mit dem CB-Wert übereinstimmt
If Sheets("Urlaub").Cells(i, 5).Value = UJahr.Text Then
lngCounter = lngCounter + 1
Daten(lngCounter, 0) = Sheets("Urlaub").Cells(i, 1)
Daten(lngCounter, 1) = Sheets("Urlaub").Cells(i, 2)
Daten(lngCounter, 2) = Sheets("Urlaub").Cells(i, 3)
Daten(lngCounter, 3) = Sheets("Urlaub").Cells(i, 4)
Daten(lngCounter, 4) = Sheets("Urlaub").Cells(i, 5)
End If
Next
.List() = Daten
End With

End Sub
Zur Prüfung müssten dann auch Datensätze anderer Jahre als nur 2009 vorhanden sein... :holy:

Suwarin
23.04.2009, 11:14
Hallo Jinx,

Danke für Deine Antwort.
Funktioniert soweit primich ...