Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
900to904
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
900to904
900to904
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

In ListBox suchen

In ListBox suchen
27.08.2007 14:54:56
Mike
Hallo zusammen.
Bei dem folgenden Code (hier aus dem Archiv. Danke dafür!)

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Then
Dim liSuche As Integer, liMsg As Integer, liSuche1 As Integer
For liSuche = 0 To ListBox1.ListCount - 1
For liSuche1 = 0 To ListBox1.ColumnCount - 1
If InStr(1, LCase(ListBox1.Column(liSuche1, liSuche)), LCase(TextBox1.Text)) _
> 0 Then
ListBox1.ListIndex = liSuche
End If
Next
Next
TextBox1.Text = ""
End If
End Sub


suche ich in einer ListBox über eine TextBox z. B. den Eintrag „mann“. Der Eintag wird in der Liste gefunden und markiert.
Das funktionier auch super. Jetzt meine Frage...
Wie kann ich mir mit dem Code alle Einträge die „mann“ enthalten in meiner ListBox anzeigen bzw. auflisten lassen?
Meine ListBox wird mit dem folgenden Code gefüllt.


Private Sub UserForm_initialize()
Dim i As Integer
Dim sh As Worksheet
Set sh = Sheets("Übersicht")
UserForm3.ListBox1.ColumnCount = 3
UserForm3.ListBox1.ColumnWidths = "0,0 cm; 1,8 cm; 5,5 cm"
For i = 4 To 103
If sh.Cells(i, 3) = "G" Then
ListBox1.AddItem sh.Cells(i, 2)                                     '2 = Spalte B
ListBox1.List(ListBox1.ListCount - 1, 1) = Left(sh.Cells(i, 2), 10) '2 = Spalte B
ListBox1.List(ListBox1.ListCount - 1, 2) = sh.Cells(i, 4)           '4 = Spalte D
End If
Next i
End Sub


Ich danke im voraus für Eure Hilfe!
Gruß, Mike

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: In ListBox suchen
27.08.2007 15:06:58
gerwas
Hallo
wenn die liste mehrfachauswahl zuläßt zuerst markieren und dann die markierung per schleife auslesen:
das markeiren geht so:

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Then
Dim liSuche As Integer, liMsg As Integer, liSuche1 As Integer
For liSuche = 0 To ListBox1.ListCount - 1
For liSuche1 = 0 To ListBox1.ColumnCount - 1
If InStr(1, LCase(ListBox1.Column(liSuche1, liSuche)), LCase(TextBox1.Text)) _
_
> 0 Then
ListBox1.ListIndex = liSuche
ListBox1.Selected(ListIndex)=True 
End If
Next
Next
TextBox1.Text = ""
End If
End Sub


mfg gerwas

Anzeige
AW: In ListBox suchen
27.08.2007 15:54:26
fcs
Hallo Mike,
mit folgender Anpassung werden alle Einträge die nicht den Eintrag in der Textbox enthalten aus der Liste entfernt.
Du könntest natürlich auch die Liste ähnlich wie im Initialisierungs-Code jeweils neu generieren und dabei die Zeilen überspringen, die den Eintrag in der Textbox nicht enthalten.
Gruß
Franz

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Then
Dim liSuche As Integer, liMsg As Integer, liSuche1 As Integer
Dim DeleteItem As Boolean
For liSuche = Listbox1.ListCount - 1 To 0
DeleteItem = True
For liSuche1 = 0 To Listbox1.ColumnCount - 1
If InStr(1, LCase(Listbox1.Column(liSuche1, liSuche)), LCase(TextBox1.Text)) _
> 0 Then
DeleteItem = False
Exit For
End If
Next
If DeleteItem = True Then
Listbox1.RemoveItem (liSuche)
End If
Next
TextBox1.Text = ""
End If
End Sub
Teilcode für neu generieren der Auswahlliste für die textbox:
Listbox1.Clear
For i = 4 To 103
If sh.Cells(i, 3) = "G" Then
If InStr(1, LCase(Left(sh.Cells(i, 2), 10)), LCase(TextBox1.Text)) > 0 _
Or InStr(1, LCase(sh.Cells(i, 4)), LCase(TextBox1.Text)) > 0 Then
Listbox1.AddItem sh.Cells(i, 2)                                     '2 = Spalte B
Listbox1.List(Listbox1.ListCount - 1, 1) = Left(sh.Cells(i, 2), 10) '2 = Spalte B
Listbox1.List(Listbox1.ListCount - 1, 2) = sh.Cells(i, 4)           '4 = Spalte D
End If
End If
Next i


Anzeige
AW: In ListBox suchen
27.08.2007 17:26:24
Mike
Vielen Dank für die schnelle Antwort!
@gerwas:
Die Mehrfachauswahl ist möglich, jedoch weiß ich nicht wie ich die Markierung per schleife auslesen kann?
@Franz
Es tut mit leid, jedoch bekomme ich bei der Anpassung kein vernünftiges Ergebnis!
1) bei "Private Sub TextBox1_KeyDown" markiert er nicht einmal mehr den Eintrag.
2) bei "Teilcode für neu generieren der Auswahlliste für die textbox:" ist eigentlich alles wie zuvor.
und bei beiden Anpassungen zusammen bleibt es wie bei Punkt 1.

AW: In ListBox suchen
28.08.2007 07:38:00
P@ulchen
Hallo Mike,
stelle die MultiSelect-Eigenschaft der ListBox auf 1 (fmMultiSelectMulti) und ersetze im Code Deiner Textbox1_KeyDown die Zeile
ListBox1.ListIndex = liSuche
durch
ListBox1.Selected(liSuche) = True
Gruß aus Leipzig
P@ulchen
www.excel-werkstatt.de

Anzeige
AW: In ListBox suchen
28.08.2007 10:25:12
Mike
Hi P@ulchen.
Das mit dem markieren funktioniert, ist aber leider nicht das Ergebnis was ich erzielen wollte.
Wenn ich in einer ListBox verschiedene Nummern habe, wie z. B. „1“ „3“ „5“ „4“ „5“ und gebe in meiner TextBox dann die 5 ein, möchte ich, dass er mir nur die beiden Zahlen 5 anzeigt. So ist es halt auch wenn ich „mann“ eingebe, sollte er mir die Einträge „Mustermann“ oder Mannschaft oder auch Mettmannhausen anzeigen. Der Rest sollte aus der
Listbox ausgeblendet werden. Und wenn die TextBox leer ist wieder meine Ursprungs Daten anzeigen.
Ich habe aus dem Archiv ein Beispiel gefunden, da funktioniert es aber leider nur mit dem Anfangsbuchstabe bzw. immer nur von links nach rechts.
Leider bekomme ich es nicht auf meinen Code umgebaut.
Ich hoffe es ist verständlich?
Jedoch… danke für Deine Hilfe. Denn das mit dem Markieren kann ich für eine andere Sache gut verwenden. :-)
Gruß, Mike

Anzeige
AW: In ListBox suchen
28.08.2007 11:07:00
P@ulchen
Hallo Mike,
dann so:

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Dim liSuche As Integer, liMsg As Integer, liSuche1 As Integer
Dim xVar As Boolean
If KeyCode = 13 Then
For liSuche = ListBox1.ListCount - 1 To 0 Step -1
xVar = False
For liSuche1 = ListBox1.ColumnCount - 1 To 0 Step -1
If InStr(1, LCase(ListBox1.Column(liSuche1, liSuche)), LCase(TextBox1.Text)) > 0  _
Then xVar = True
Next
If xVar = False Then ListBox1.RemoveItem (liSuche)
Next
TextBox1.Text = ""
End If
End Sub


Gruß aus Leipzig
P@ulchen
www.excel-werkstatt.de

Anzeige
AW: In ListBox suchen
28.08.2007 11:57:00
Mike
Hi P@ulchen.
Das ist es. Suuuper!
Jedoch ein Problem ergibt sich noch.
Wenn ich meine Eingabe gemacht habe, muss ich die Eingabetaste drücken, damit er mir die Einträge auch anzeigt. Dann kann ich aber nicht mehr nach einem anderen Eintrag suchen, da ja nur noch die gesuchten einträge und nicht die ganze Liste angezeigt wird.
Gibt es ne Möglichkeit, die suche so zu gestalten, dass wenn ich einen Begriff (ab 3 Buchstaben oder so) eingebe, mir die Suchergebnisse schon beim eingeben in der ListBox anzeigt werden und wenn ich die Buchstaben lösche er mir die liste zurück schreibt?
In etwa so, wie in diesem Beispiel! (https://www.herber.de/bbs/user/43484.xls)
Gruß, Mike

Anzeige
AW: In ListBox suchen
28.08.2007 10:51:00
gerwas
Hallo Mike
Leider habe ich eine kleinen Fehler in méiner Ergänzung gehabt. Hier nun nochmal der ganze Code:

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Then
Dim liSuche As Integer, liMsg As Integer, liSuche1 As Integer
For liSuche = 0 To ListBox1.ListCount - 1
For liSuche1 = 0 To ListBox1.ColumnCount - 1
If InStr(1, LCase(ListBox1.Column(liSuche1, liSuche)), _
LCase(TextBox1.Text)) > 0 Then
ListBox1.Selected(liSuche) = True
'hier war der fehler ListIndex
End If
Next
Next
TextBox1.Text = ""
End If
'bereits jetzt kannst du in der liste alle markierten einträge sehen,
'wenn du sie durchscrollst
liste_schreiben
End Sub


Sub liste_schreiben()
Worksheets.Add 'damit wir nichts überschreiben
k = 1
ActiveSheet.Cells(k, 1) = "Gefundene Datensätze"
Dim liSuche As Integer
For liSuche = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(liSuche) Then
k = k + 1
ActiveSheet.Cells(k, 1) = ListBox1.List(k) 'die Ausgabe mußt du noch anpassen
End If
Next
End Sub


mfg gerwas

Anzeige
AW: In ListBox suchen
28.08.2007 11:22:00
Mike
Hi gerwas.
Sorry, aber vielleicht drücke ich mich ja nicht richtig aus.
Ich möchte die Daten nicht in ein Arbeitsblatt schreiben. Ich möchte lediglich das er mir die Daten die ich in der ListBox suche auch in meiner ListBox anzeigt. Nicht die ganze Liste, sonder nur die gesuchten. Es funktioniert ja bei Archivbeispielen. Aber nicht mit einer Volltextsuche, sonder nur von links nach rechts bzw. per Anfangsbuchstabe.
Habe im Archiv mal ein Beispiel gefunden, welches mir sehr gut gefällt.
Hier der Beitrag:
https://www.herber.de/forum/archiv/880to884/t880205.htm
oder das Beispiel direkt:
https://www.herber.de/bbs/user/43484.xls
Danke! Gruß, Mike

Anzeige
AW: In ListBox suchen
28.08.2007 14:02:00
gerwas
o.k. dann versuchs mal hiermit:

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Then
Dim liSuche As Integer, liMsg As Integer, liSuche1 As Integer
For liSuche = 0 To ListBox1.ListCount - 1
If ListBox1.ListCount = liSuche Then Exit For
For liSuche1 = 0 To ListBox1.ColumnCount - 1
If InStr(1, LCase(ListBox1.Column(liSuche1, liSuche)), _
LCase(TextBox1.Text)) > 0 Then
ListBox1.Selected(liSuche) = True
End If
Next
                   If Not ListBox1.Selected(liSuche) Then
ListBox1.RemoveItem (liSuche)
liSuche = liSuche - 1
End If
               Next
TextBox1.Text = ""
End If
'bereits jetzt kannst du in der liste alle markierten einträge sehen, wenn du sie  _
durchscrollst
End Sub


mfg gerwas

Anzeige
AW: In ListBox suchen
28.08.2007 14:26:00
Mike
Hi!
Auch das funktioniert Super!
Jedoch wie schon P@ulchen beschrieben, gibt es noch ein Problem.
Wenn ich meine Eingabe gemacht habe, muss ich die Eingabetaste drücken, damit er mir die Einträge auch anzeigt. Dann kann ich aber nicht mehr nach einem anderen Eintrag suchen, da ja nur noch die gesuchten einträge und nicht die ganze Liste angezeigt wird.
Gibt es ne Möglichkeit, die suche so zu gestalten, dass wenn ich zurück in die TextBox springe, dass er mir die Liste zurück schreibt und/oder bei einer Eingabe mir die Suchergebnisse schon beim eingeben in der ListBox anzeigt werden.
In etwa so, wie in dem Beispiel!
Gruß, Mike

AW: In ListBox suchen
28.08.2007 15:06:06
gerwas
Es gibt immer mindestens zwei Möglichkeiten...
eine ist die hier: per Mausklick auf die TextBox wird die Liste neu gefüllt, geht auch mit einem anderen Ereignis oder einem Commandbutton.
(alle macros in die Userform kopieren und ev. vorhandene ersetzen)

Private Sub TextBox1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As  _
Single, ByVal Y As Single)
UserForm3.ListBox1.Clear
liste_füllen
End Sub



Private Sub UserForm_initialize()
UserForm3.ListBox1.ColumnCount = 3
UserForm3.ListBox1.ColumnWidths = "0,0 cm; 1,8 cm; 5,5 cm"
liste_füllen
End Sub


Sub liste_füllen()
Dim i As Integer
Dim sh As Worksheet
Set sh = Sheets("Übersicht")
For i = 4 To 103
If sh.Cells(i, 3) = "G" Then
ListBox1.AddItem sh.Cells(i, 2) '2 = Spalte B
ListBox1.List(ListBox1.ListCount - 1, 1) = Left(sh.Cells(i, 2), 10) '2 = Spalte B
ListBox1.List(ListBox1.ListCount - 1, 2) = sh.Cells(i, 4) '4 = Spalte D
End If
Next i
End Sub


;-)) Gerwas

AW: In ListBox suchen
28.08.2007 22:11:59
Mike
Hi Gerwas, @P@ulchen.
Konnte alles sehr gut umsetzten. Klapp Super!
Vielen lieben Dank für Eure Hilfe.
Gruß, Mike

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige