AW: Suche in Tabelle über UF
16.10.2019 19:20:49
Matthias
Moin!
So habe mal geschaut. Gibt da mehrere Baustellen. Hier mal ein lauffähiger Code.
Private Sub CommandButton1_Click()
TextBox6 = ComboBox1
TextBox7 = ComboBox2
Dim quelle As Object
Dim daten, ergebnis
Dim zeile As Long, ende As Long, spalte As Long, eintrag As Long, anzerg As Long
Dim wert, wert2
Dim kriterien
Dim eintragen As Boolean
Dim anzahl As Long 'anzahl der Listboxen
Set quelle = Worksheets("Projekte")
Set kriterien = CreateObject("Scripting.Dictionary")
anzahl = 25
With Projektsuche
'Listbox leeren
.ListBox1.Clear
.ListBox1.ColumnCount = anzahl + 1 'Listbox bekommt 4 Spalten (kannst du auch ?ber die _
Einstellungen einstellen)
ende = quelle.Cells(quelle.Rows.Count, 1).End(xlUp).Row
ReDim ergebnis(ende, anzahl)
daten = quelle.Range(quelle.Cells(1, 1), quelle.Cells(ende, anzahl))
For spalte = 1 To anzahl
If .Controls("Textbox" & spalte) "" Or spalte = anzahl Then
kriterien.Add spalte, .Controls("Textbox" & spalte).Value
End If
Next
If kriterien.Count = 1 And _
Me.Controls("OptionButton1") = False And _
Me.Controls("OptionButton1") = False Then Exit Sub
For zeile = 3 To ende 'suche startet erst in Zeile 3
eintragen = True
For eintrag = 1 To kriterien.Count
If kriterien.keys()(eintrag - 1) "") Or _
(Projektsuche.Controls("OptionButton2").Value = True And wert2 = "") Then
eingetragen = False
Exit For
End If
End If
If InStr(1, wert, kriterien.items()(eintrag - 1), vbTextCompare) = 0 Or kriterien. _
_
items()(eintrag - 1) = "" Then
eintragen = False
Exit For
End If
Next
If eintragen = True Then
anzerg = anzerg + 1
For i = 1 To anzahl
ergebnis(anzerg, i) = daten(zeile, i)
Next
End If
Next
.ListBox1.List = ergebnis
End With
End Sub
Der hat aber ein paar Macken. In der Listbox sind genau soviel Zeilen, wie Einträge in der Tabelle. Das Problem ist / war, dass man mit der additem Methode nur 10 Spalten einer LIstbox befüllen kann. Im Code wolltest du aber 25. Das geht so nicht. Habe deshalb ein Array gebastelt und übergebe das. Wegen der Dimenisonierung habe ich mal die Zeilenanzahl genommen (ist ja das Maximum). Mann kann die Leerzeilen noch weg machen. Da müsste man aber wissen, ob das NOt tut. Wenn du nicht alls Spalten brauchst, könnte man sonst auch additem nutzen. Da er mit die letzte Spalte auch nicht angezeigt hat, hat das zu übergebende Array 26 Spalten da nicht wundern. Deshalb habe ich auch die ColumnCOunt um 1 erhöht.
Was habe ich geändert.
- Im Vergleich der Optionbutton habe ich einen wert2 drin. Der gibt den Inhat der Zelle an.
- Die Suche beginnt erst ab Zeile 3. Falls du am Tabellenkopf was änderst, dort bitte anpassen, sonst könnte ggf eine Zeile fehlen.
- beachte die Anmerkungen zu ColumnCount am Anfang
Mehr fällt mir grad nicht ein.
Also bitte mal schauen, ob du wirklich 25 Spalten brauchst. Wenn Fragen sind, einfach stellen.
VG