Spalte in LB nach Wert durchsuchen

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
Bild

Betrifft: Spalte in LB nach Wert durchsuchen
von: Chris
Geschrieben am: 29.06.2015 07:30:54

Hallo VBAler,
ich möchte in einer vierspaltigen Listbox die vierte Spalte nach einem bestimmten Eintrag durchsuchen. Wenn dieser gefunden worden ist, soll eine msgbox ausgegeben werden.
Ich erhalte die Fehlermeldung "Objekt erforderlich". Weiß jmd. eine Lösung?
Danke
Chris

Private Sub CommandButton12_Click()
Dim lngcolumn As Long
With UserForm1.ListBox3
If .List(.ListCount - 1, 3).Value = "A" Then
MsgBox "A gefunden"
Else
MsgBox "nicht gefunden"
End If
End With
   
End Sub

Bild

Betrifft: AW: Spalte in LB nach Wert durchsuchen
von: Beverly
Geschrieben am: 29.06.2015 08:07:45
Hi Chris,
vielleicht so:

    If Not IsError(Application.Match("A", Application.Index(ListBox1.List, 0, 4), 0)) Then
        MsgBox "Vorhanden"
    Else
        MsgBox "Nicht vorhanden"
    End If



Bild

Betrifft: AW: Spalte in LB nach Wert durchsuchen
von: Chris
Geschrieben am: 29.06.2015 08:38:18
Hi Beverly,
danke für deine Antwort. Ich erhalte die Meldung "Typen unvertäglich" sobald A vorhanden ist....
Eine Idee?
Chris

Bild

Betrifft: AW: Spalte in LB nach Wert durchsuchen
von: Beverly
Geschrieben am: 29.06.2015 10:59:46
Hi Chris,
bei mir löst der Code keinen Fehler aus.
https://www.herber.de/bbs/user/98540.xlsm




Bild

Betrifft: AW: Spalte in LB nach Wert durchsuchen
von: Chris
Geschrieben am: 29.06.2015 12:34:00
HI Karin,
danke für das Beispiel. Der unterschied zu meinem besteht darin, dass die Inhalte der UserForm nicht in einem mit der LB3 verknüpften Sheet enthalten sind, sondern nur optisch in der LB3 angezeigt werden. Müssen die Inhalte der LB3 zwingend an ein Sheet übergeben werden?
Gruß
Chris

Bild

Betrifft: AW: Spalte in LB nach Wert durchsuchen
von: Beverly
Geschrieben am: 29.06.2015 14:37:01
Hi Chris,
wie füllst du deine ListBox?




Bild

Betrifft: AW: Spalte in LB nach Wert durchsuchen
von: Chris
Geschrieben am: 29.06.2015 17:32:16
Melde mich morgen diesbezüglich Gruß

Bild

Betrifft: AW: Spalte in LB nach Wert durchsuchen
von: Chris
Geschrieben am: 30.06.2015 06:07:21
Hallo Karin,
anbei das Makro um die Listbox zu füllen:
On Error GoTo err
Dim lngRow As Long, lngcolumn As Long
With ListBox1
For lngRow = 0 To .ListCount - 1
If .Selected(lngRow) Then
ListBox3.AddItem
For lngcolumn = 0 To .ColumnCount - 1
ListBox3.List(ListBox3.ListCount - 1, lngcolumn) = .List(lngRow, lngcolumn)
Next
End If
Next
End With
err:
Exit Sub
End Sub

Bild

Betrifft: AW: Spalte in LB nach Wert durchsuchen
von: Beverly
Geschrieben am: 30.06.2015 06:29:00
Hi Chris,
eine Möglichkeit:

    Dim lngZaehler As Long
    Dim blnVorhanden As Boolean
    For lngZaehler = 1 To ListBox1.ListCount
        If ListBox1.List(lngZaehler, 3) = TextBox1 Then
            blnVorhanden = True
            Exit For
        End If
    Next lngZaehler
    If blnVorhanden Then
        MsgBox "Vorhanden"
    Else
        MsgBox "Nicht vorhanden"
    End If

Eine Frage: wozu benötigst du On Error in deinem Code?



Bild

Betrifft: AW: Spalte in LB nach Wert durchsuchen
von: Chris
Geschrieben am: 30.06.2015 07:07:01
Hi Karin,
danke, scheint erstmal zu laufen. ch habe aus If ListBox1.List(lngZaehler, 3) = TextBox1 .... ="A" gemacht.
Kann man das auch auf ein zweites Kriterium erweitern ohne das gesamte Makro kopieren zu müssen?
also so:
If ListBox1.List(lngZaehler, 3) = "A" Or "B" Then
....
On error: Ich das meistens noch rein, damit die VBA Umgebung nicht meckert, weil manchmal auch andere Leute mit diesen Makros arbeiten, die noch weniger Ahnung haben als ich ;-)
Könntest du mir das Makro oben Zeile für Zeile erklären? Was ist Boolean? Die Hilfe auf die oft verwiesen wird, ist leider für mich nicht hilfreich :-/
Vielen Vielen Dank für deine Hilfe ! TOP :-)

Bild

Betrifft: AW: Spalte in LB nach Wert durchsuchen
von: Beverly
Geschrieben am: 30.06.2015 07:31:37
Hi Chris,
zu Frage 1: du musst für beide Abfragen auch angeben, womit vergleichen werden soll - also der ListBox-Spalte

If ListBox1.List(lngZaehler, 3) = "A" Or ListBox1.List(lngZaehler, 3) = "B" Then

On Error - sollte man nur sehr spärlich einsetzen und nur dann wenn es KEINE andere Möglichkeit für das Abfangen eines Fehler gibt. In deinem Fall musst du dich fragen: was für ein Fehler könnte denn beim Durchlaufen der Schleife für die selektierten Einträge auftreten? Die Antwort ist m.E. - kein Fehler. Ist etwas ausgewählt, dann wird die Schleife normal ausgeführt, ist nichts ausgewählt, dann passiert auch nichts. Fazit: On Error kannst du hier weglassen.
Zu Frage des Codes: eine Boolean-Variable gibt 2 Zustände wieder - entweder Wahr oder Falsch. Im Code wird in der Schleife über alle ListBox-Einträge geprüft, ob der laufende Eintrag in der 4. Spalte (beachte - Spaltenzählung beginnt bei 0, deshalb 3 im Code) dem Inhalt der TextBox entspricht. Falls Ja, dann wird die Boolean-Variable auf True gesetzt und die Schleife verlassen - damit kann der Codedurchlauf abgekürzt werden, falls der gesuchte Eintrag schon vor der letzten Zeile gefunden wird. Anschließend wird geprüft, ob die Variable auf True steht (der Wert also gefunden wurde) und in Abhängigkeit davon wird die MsgBox ausgegeben.



Bild

Betrifft: AW: Spalte in LB nach Wert durchsuchen
von: Chris
Geschrieben am: 30.06.2015 07:50:57
Hi Karin,
danke, scheint erstmal zu laufen. ch habe aus If ListBox1.List(lngZaehler, 3) = TextBox1 .... ="A" gemacht.
Kann man das auch auf ein zweites Kriterium erweitern ohne das gesamte Makro kopieren zu müssen?
also so:
If ListBox1.List(lngZaehler, 3) = "A" Or "B" Then
....
On error: Ich das meistens noch rein, damit die VBA Umgebung nicht meckert, weil manchmal auch andere Leute mit diesen Makros arbeiten, die noch weniger Ahnung haben als ich ;-)
Könntest du mir das Makro oben Zeile für Zeile erklären? Was ist Boolean? Die Hilfe auf die oft verwiesen wird, ist leider für mich nicht hilfreich :-/
Vielen Vielen Dank für deine Hilfe ! TOP :-)

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Spalte in LB nach Wert durchsuchen"