Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1688to1692
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Listbox mit Inhalt aus Textboxen durchsuchen
06.05.2019 09:19:32
Tim
Guten Morgen zusammen,
ich hab Dank des Forums bereits Hilfe zu diesem Thema erhalten, jedoch stellt mich das "Weiterbauen" meiner Userform vor eine neue Herausforderung die mir bis Dato nicht bekannt gewesen ist.
Erreicht habe ich, dass ein Suchbegriff aus einer Textbox in der Listbox gesucht wird. Neu ist, dass ich mehrere Textboxen habe, deren Suchbegriff in verschiedenen Spalten gesucht werden soll. Das Makro konnte ich soweit anpassen.
Die Herausforderung liegt darin, dass einzelne Textbox zwischendrin geleert oder geändert werden. Dabei soll nur die Markierung aufgehoben/neugesetzt werden bei der die Änderung in der Textbox vorgenommen wurde und nicht alle Markierungen.
Heißt, mit jedem Change-Ereignis in der jeweiligen Textbox, soll das Makro die verbleibenden Einträge anderer Textboxen markiert lassen sofern diese gefüllt sind und eine Treffer des Suchbegriffes landen konnten und das aktuelle Change-Ereignis berücksichtigen.
Wer kann mir dabei behilflich sein?
Private Sub Textbox2_Change()
Dim i As Long
With UserForm1.ListBox1
If Me.TextBox1.Text = "" Then
For i = 0 To .ListCount - 1
If .Selected(i) Then .Selected(i) = False
Next i
Exit Sub
End If
If Me.TextBox2 = "" Then
For i = 0 To .ListCount - 1
If .Selected(i) Then .Selected(i) = False
Next i
Exit Sub
End If
For i = 0 To .ListCount - 1
If .List(i) Like "*" & TextBox1.Text & "*" Then
.Selected(i) = True
End If
If .List(i, 3) Like "*" & TextBox2.Text & "*" Then
.Selected(i) = True
End If
Next
End With
End Sub

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Listbox mit Inhalt aus Textboxen durchsuchen
07.05.2019 13:22:44
Matthias
Moin!
Also ich würde das in eine Funktion auslagern und immer die Textbox übergeben. Der Ablauf ist ja für alle Textboxen gleich. Dadurch lässt sich der Code besser warten. Ablauf wäre: Durch alle Listboxzeilen gehen, prüfen ob die Vorausetzungen zur Markierung vorliegen und danach entweder die Markierung löschen oder setzen. Man könnte das auch noch optimieren. Da wäre aber die Frage, wieviele Textboxen hast du, wieviele Listboxspalten und ist jede Textbox auch genau (!) einer Spalte zugewiesen oder können mehrere Textboxen die gleiche Spalte beeinflussen? (im Code oben sind es nur 2 Boxen und die haben unterschiedeliche Spaltenzuordnungen). Mit den Antworten könnte man was basteln - noch besser wäre natürlich eine Beispielmappe, würde aber auch so gehen.
VG
Anzeige
AW: Listbox mit Inhalt aus Textboxen durchsuchen
07.05.2019 14:23:44
Tim
Hallo Matthias,
es sind insgesamt 3 Textboxen, davon sollen zwei Textboxen die erste Spalte durchsuchen und die dritte Textbox, die dritte Spalte.
Hier mal eine Vorlage dazu https://www.herber.de/bbs/user/129642.xlsm
AW: Listbox mit Inhalt aus Textboxen durchsuchen
07.05.2019 19:34:39
Matthias
Moin!
Hier mal der Code deiner UF angepasst. Habe dabei nur eine Funktion genommen. Ansonsten müsstest du bei Änderungen das dreimal machen. Hinweis noch: Der Vergleich unterscheidet Groß-/Kleinschreibung. Falls du das weghaben willst, bei den Vergleichen immer UCASE()für de Ausdrücke verwenden.
Private Sub TextBox2_Change()
Call aktualisieren
End Sub
Private Sub Textbox1_Change()
Call aktualisieren
End Sub
Private Sub TextBox3_Change()
Call aktualisieren
End Sub
Private Sub UserForm_Initialize()
UserForm1.ListBox1.ColumnCount = 5
UserForm1.ListBox1.ColumnWidths = "18cm;0cm;;0cm;5cm;2cm"
Call Daten_einlesen ' Modul1
End Sub
Private Sub aktualisieren()
Dim lngZeile As Long
Dim lngIndex As Long
Dim markieren As Boolean
With ListBox1
For lngZeile = 0 To .ListCount - 1
markieren = False
For lngIndex = 1 To 3
If Me.Controls("TextBox" & lngIndex)  "" Then
If lngIndex = 1 Or lngIndex = 2 Then
If .List(lngZeile) Like "*" & Me.Controls("TextBox" & lngIndex) & "*" Then  _
markieren = True
Else
If .List(lngZeile, 2) Like "*" & Me.Controls("TextBox" & lngIndex) & "*"  _
Then markieren = True
End If
End If
Next
If markieren = True Then
.Selected(lngZeile) = True
Else
.Selected(lngZeile) = False
End If
Next lngZeile
End With
End Sub

VG
Anzeige
AW: Listbox mit Inhalt aus Textboxen durchsuchen
08.05.2019 16:18:19
Tim
Vielen Dank Matthias, funktioniert wie gewünscht!
Wenn ich eine weitere Textbox dazuhaben will, muss ich nur diesen For lngIndex = 1 To 3 erhöhen oder!?
AW: Listbox mit Inhalt aus Textboxen durchsuchen
08.05.2019 17:17:02
Matthias
Moin!
Nicht nur. Der lngIndex ist die Anzahl der Textboxen. Die Nummern müssen aber auch alle vorkommen, sonst läuft der Code in einen Fehler! Also die nächste Box sollte TextBox4 sein (nicht TextBox5 etc.). Den also - richtig erkannt - erhöhen. Dann müsstest du aber noch die if Prüfung anpassen. Das wird dann bei mehreren Boxen aber ein Gewurstel von if / elseif / else. Damit das etwas übersichtlicher wird, habe ich den Code da mal angepasst. Jetzte werden die lngINdex in einem select case geprüft (Ergebnis ist das selbe, nur andere Vorgehensweise). Jeder Case Zweig gilt da für eine Spalte in der Listbox. Bei lngIndex 1 und 2 die erste Spalte bei 3 die 3. Spalte. Für jede weitere Box schauen, welche Spalte sie durchsucht. Hast du dafür schon einen case, dort einfach die Nummer der Box mit ergänzen. Bspw. case 1,2,4. Hast du die Spalte noch nicht, einfach einen Case einfügen. Dort die Nummer dahinter und in dem folgenden if die richtige Spalte beim .list() auswählen. Klingt jetzt kompliziert ist es aber nicht. Habe mal ein Bsp. für TB4 und Spalte 2 mit eingebaut (aber auskommentiert). Das war's dann eigentlich an Anpassungen - mehr ist nicht erforderlich. Natürlich der Box noch das Event zuweisen. :-) HIer mal der Code (die Zeilenumbrüche wieder zurüclsetzen):
Private Sub aktualisieren()
Dim lngZeile As Long
Dim lngIndex As Long
Dim markieren As Boolean
With ListBox1
For lngZeile = 0 To .ListCount - 1
markieren = False
For lngIndex = 1 To 3   'lngIndex entspricht der Nummer im TxtBox Namen
If Me.Controls("TextBox" & lngIndex)  "" Then
Select Case lngIndex
Case 1, 2   'Prüfung in Spalte 1
If .List(lngZeile) Like "*" & Me.Controls("TextBox" & lngIndex) & "*"  _
Then markieren = True
'Case 4      'Prüfung in Spalte 2
'   If .List(lngZeile, 1) Like "*" & Me.Controls("TextBox" & lngIndex) & "*" _
Then markieren = True
Case 3      'Prüfung in Spalte 3
If .List(lngZeile, 2) Like "*" & Me.Controls("TextBox" & lngIndex) & "*" _
Then markieren = True
End Select
End If
If markieren = True Then Exit For   'damit ist der Code ggf. schneller
Next
If markieren = True Then
.Selected(lngZeile) = True
Else
.Selected(lngZeile) = False
End If
Next lngZeile
End With
End Sub

VG
Anzeige
AW: Listbox mit Inhalt aus Textboxen durchsuchen
09.05.2019 21:57:43
Tim
Perfekt, vielen Dank!!

304 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige