Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1628to1632
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
Inhaltsverzeichnis

ListBox Zeile löschen

ListBox Zeile löschen
03.07.2018 13:03:29
Stephan
Hallo, ich habe eine ListBox die ich nach einem Begriff in einer TextBox durchsuchen lassen. Damit der Text nicht vollständig eingegeben werden muss, benutze ich die InStr Funktion.
Jetzt möchte ich alle Zeilen, in denen der Suchbegriff nicht vorkommt ausgeblendet haben. Mein Code dazu sieht folgenderweise aus:

Private Sub CommandButton_Suchen_Click()
Dim i As Integer, ii As Integer
For i = 0 To ListBox_Liste.ListCount - 1
For ii = 0 To ListBox_Liste.ColumnCount - 1
If InStr(ListBox_Liste.List(i, ii), TextBox1.Text) Then
Else
ListBox_Liste.RemoveItem
End If
Next
Next
End Sub

Allerdings werden die Zeilen nicht entfernt :( Jemand eine Idee was da falsch ist?
Liebe Grüße,
Stephan

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ListBox Zeile löschen
03.07.2018 13:20:39
Daniel
Hi
1. Du musst die Indexnummer der Zeile, die gelöscht werden soll, auch angeben.
.RemoveItem i
2. nachdem du die Zeile gelöscht hast, musst du die Schleife über die Spalten (ii) mit Exit For abbrechen.
3. die Schleife über die Zeilen muss rückwärts laufen:
For i = Listbox1.Listcount -1 to 0 step - 1
Gruß Daniel
AW: ListBox Zeile löschen
03.07.2018 13:25:32
Stephan

Private Sub CommandButton_Suchen_Click()
Dim i As Integer, ii As Integer
For i = ListBox_Liste.ListCount - 1 To 0 Step -1
For ii = 0 To ListBox_Liste.ColumnCount - 1
If InStr(ListBox_Liste.List(i, ii), TextBox1.Text) Then
Else
ListBox_Liste.RemoveItem i
Exit For
End If
Next
Next
End Sub
So sieht das nun aus bei mir. Klappt aber immernoch nicht. Es tut sich gar nichts mehr. Ich verzweifel gleich :(
Anzeige
AW: ListBox Zeile löschen
03.07.2018 13:35:01
Daniel
Hi
ok die Zeile soll wohl gelöscht werden, wenn der Suchbegriff in keiner der Spalten vorkommt.
dann musst du zuerst die Werte zu einem Text zusammensetzen und dann erst das gesamte prüfen.
so wie es jetzt geschrieben ist, muss der gesuchte Begriff in jeder Spalte stehen, damit die Zeile "überlebt":
dim txt as string
For i = Listbox_Liste.ListCount - 1 to 0 step - 1
txt = ""
For ii = 0 to Listbox_Liste.List.column.count
txt =txt & "|" & Listbox_Liste.List(i, ii)
Next
if Instr(txt, Textbox1.Text = 0 then Listbox_liste.RemoveItem i
Next i

oder so, dh innere Schleife abbrechen, wenn Text gefunden wurde und dann löschen, wenn die innere Schleife vollständig durchlaufen wurde:
For i = Listbox_Liste.ListCount - 1 to 0 step - 1
For ii = 0 to Listbox_Liste.List.columncount
if Instr(Listbox_Liste(i, ii), Textbox1.Text) then Exit for
Next
if ii = Listbox_Liste.ColumnCount then Listbox_Liste.RemoveItem i
Next i
Gruß Daniel
Anzeige
Korrektur
03.07.2018 13:36:24
Daniel
korretkur:
ich war da etwas schnell
die innere Schleife muss lauten:
for ii = 0 to Listbox_liste.Columncount - 1
Gruß Daniel
AW: Korrektur
03.07.2018 13:41:25
Stephan
Jap, es funktioniert. Vielen Dank Daniel! :)
AW: ListBox Zeile löschen
03.07.2018 13:21:34
Nepumuk
Hallo Stephan,
du musst bei der RemoveItem-Methode die Zeilennummer angeben die gelöscht werden soll. Beispiel:
Private Sub CommandButton_Suchen_Click()
Dim i As Long, ii As Long
Dim blnFound As Boolean
With ListBox_Liste
    For i = 0 To .ListCount - 1
        blnFound = False
        For ii = 0 To .ColumnCount - 1
            If InStr(.List(i, ii), TextBox1.Text) <> 0 Then
                blnFound = True
                Exit For
            End If
        Next
        If Not blnFound Then Call .RemoveItem(i)
    Next
End Sub

Gruß
Nepumuk
Anzeige
Nachtrag
03.07.2018 13:24:09
Nepumuk
Ich nochmal,
gut dass Daniel aufgefallen ist dass die Schleife rückwärts laufen muss:
Private Sub CommandButton_Suchen_Click()
Dim i As Long, ii As Long
Dim blnFound As Boolean
With ListBox_Liste
    For i = .ListCount To 0 Step -1
        blnFound = False
        For ii = 0 To .ColumnCount Step -1
            If InStr(.List(i, ii), TextBox1.Text) <> 0 Then
                blnFound = True
                Exit For
            End If
        Next
        If Not blnFound Then Call .RemoveItem(i)
    Next
End Sub

Gruß
Nepumuk
Anzeige
AW: Nachtrag
03.07.2018 13:29:15
Stephan
Danke für deine Hilfe Nepumuk. Bei Call.RemoveItem(i) gibt er mir aber ein ungültiges Argument wieder. Wodran kann das denn liegen?
AW: Nachtrag
03.07.2018 13:37:09
Nepumuk
Hallo Stephan,
das hat doch gestern schon funktioniert:
Private Sub CommandButton_Suchen_Click()
    Dim lngRow As Long, lngColumn As Long
    Dim blnFound As Boolean
    Dim strText As String
    strText = TextBox1.Text
    With ListBox_Liste
        For lngRow = .ListCount - 1 To 0 Step -1
            blnFound = False
            For lngColumn = 0 To .ColumnCount - 1
                If InStr(1, .List(lngRow, lngColumn), strText) <> 0 Then
                    blnFound = True
                    Exit For
                End If
            Next
            If Not blnFound Then Call .RemoveItem(lngRow)
        Next
    End With
End Sub

Gruß
Nepumuk
Anzeige
AW: Nachtrag
03.07.2018 13:41:06
Stephan
Ja deswegen habe ich mich auch gewundet, weil ja eigentlich nur die letzte If Funktion verändert werden muss. Ich habe meinen Fehler aber jetzt gefunden, ich hatte einen Tippfehler bei der Deklartion der TextBox drin .... Danke nochmal für deine Hilfe! :)
AW: Nachtrag
03.07.2018 13:42:00
Nepumuk
Ich nochmal,
wenn du die Abfrage so gestaltest:
If InStr(1, .List(lngRow, lngColumn), strText, vbTextCompare)  0 Then

Dann spielt auch Klein/Großschreibung keine Rolle.
Gruß
Nepumuk
AW: Nachtrag
03.07.2018 13:54:19
Stephan
Perfekt! Vielen Dank genau danach habe ich gerade nämluch auch nochmal geschaut wie das hin hauen könnte :)
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige
Archiv - Verwandte Themen
Forumthread
Beiträge