Problem mit Listbox-Indexen
03.01.2014 14:31:26
Pascal
Ich stehe mal wieder vor einem für mich unlösbaren Problem:
Auf einer Userform (Frm_Zielsuche) hab ich u.a. eine Listbox in welche ich diverse Werte ab einem Tabellenblatt reinlade.
Die Werte lad ich alle über die Funktion Frm_Zielsuche.ListBox1.AddItem Cells(i, 2) in die Listbox.
Das funktioniert soweit sehr gut.
Wenn ich nun in der Listbox auf einen Eintrag klicke, so wird mir dieser in dem entsprechenden Tabellenblatt angewählt / selektiert. Es wird dann die entsprechende Listindex-Nummer ermittelt und anhand dieser Nummer auf einem Tabellenblatt "Zielsuche" die entsprechende Zeile markiert.
Es werden dann ab dem Tabellenblatt diverse weitere Daten beim entsprechenden Datensatz gelesen und in Textboxen auf der Userform (Frm_Zielsuche) angezeigt.
Das finden und selektieren des entsprechend in der Listbox1 markierten Eintrags mach ich über folgenden Code:
Nummer_in_Liste = ListBox1.ListIndex + 1 'Plus 1, weil der erste Eintrag in einer Listbox nicht die 1 trägt, sondern die Null
Range("B" & Nummer_in_Liste).Activate
Auch das funktioniert soweit perfekt.
Nun mein eigentliches Problem:
Ich habe auf der Userform u.a. auch noch diverse Option-Buttons, mittels denen ich meine Listbox nach bestimmten werten filtern kann.
z.B. hab ich folgenden Code hinter der Optionbutton1:
Private Sub OptionButton1_Click() 'Mittels diesem Option-Button kann in den Suchresultaten nach _
"Statistik" gefilter werden.
If OptionButton1.Value = True Then
With Sheets("Zielsuche")
'Alle gefilterten Einträge werden nun in die Listbox1 übertragen (aus Spalte "B" des _
Zielsuche-Formulars)
'======================================================================================= _
Application.EnableEvents = False
Frm_Zielsuche.ListBox1.Clear
'Frm_Zielsuche.ListBox1.ListIndex.Clear
aRow = [B65536].End(xlUp).Row
For i = 1 To aRow
If Cells(i, 14) = "Statistik" Then
Frm_Zielsuche.ListBox1.AddItem Cells(i, 2) 'es werden nun alle nichtleeren Zeilen der _
Spalte B in die ListBox1 eingelesen
End If
Next i
Application.EnableEvents = True
End With
Else
End If
End Sub
D.h. ich filtere mein Tabellenblatt ("Zielsuche") nach dem Wort "Statistik" und zeige somit in der Listbox nur noch die übereinstimmenden Werte (zu "Statistik") an.Das funktioniert soweit auch perfekt.
Nun aber das Problem:
Die Indexe der nun in der Listbox angezeigten Werte bleiben nicht bestehen, sondern werden nun wieder neu erstellt.
Das hat dann zur Folge, dass beim Anwählen eines Eintrags in der Listbox nicht mehr die korrekte Zeilennummer auf dem Tabellenblatt "Zielsuche" markiert wird.
Beispiel:
Ohne Filterung nach "Statistik" muss z.B. ein User auf den 4. Listbox-Eintrag (mit dem Wort "Mai-Statistik") klicken, um diesen anzuwählen. (Die Listbox hat noch andere Worte drin als "Statistik")
Dadurch wird nun auf dem Tabellenblatt "Zielsuche" der 4. Datensatz markiert. (weil Listindex 4 = Zeilennummer 4)
Nun filtere ich (durch setzen des Optionbuttons) meine Listbox so, dass nur noch Werte mit dem Wort "Statistik" angezeigt werden.
Auch das funktioniert soweit gut.
Der Datensatz "Mai-Statistik" wird nun somit in der Listbox nicht mehr an 4. Stelle aufgeführt, sondern steht nun an 1. Stelle.
Wenn nun der User aus der neugeladenen (gefiltert nach "Statistik") Listbox1 den Datensatz "Mai-Statistik" anwählt, so wird mir auf dem Tabellenblatt "Zielsuche" immer eine falsche Zeile selektiert. Grund: der Datensatz "Mai-Statistik" steht auf dem Tabellenblatt ja immer noch in der 4. Zeile. Der Index selektiert mir aber die erste Zeile.
Wie also kann ich den bei jedem Filtern meiner Listbox auch den Index "mitfiltern" ?
D.h. durch das Filtern nach "Statistik" muss der Datensatz "Mai-Statistik" in der Listbox zwar an 1. Stelle stehen, muss aber den Listindex 4 (gemäss Ursprung) behalten.
Geht das irgendwie ?
Ich hoffe, meine Frage seie so verständlich. Leider ist meine Mappe zu gross um hier einstellen zu können.
Im voraus HERZLICHEN DANK für jegliche Hilfe