Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

ListBox RowSource mit Variabler Zeile

Forumthread: ListBox RowSource mit Variabler Zeile

ListBox RowSource mit Variabler Zeile
05.09.2020 11:31:10
Max
Guten Tag,
ich bin neu hier und hoffe, dass mir jemand bei meinem Anliegen helfen kann.
Ich habe eine ListBox mit verschiedenen Namen in einer Spalte und Teilnehmerurkunden in der anderen Spalte. Da es recht viele Namen sind wollte ich auch eine Suchfunktion einbauen, welche dann das einzelne Ergebnis, also die Person mit Anzahl Teilnehmerurkunde in die ListBox zu sehen ist.
Private Sub CommandButton6_Click()
Dim Name As String
Dim Zeile As Long
Dim ZeileMax As Long
ZeileMax = Tabelle4.Cells(Rows.Count, 6).End(xlUp).Row
Name = InputBox("Bitte Name eingeben (NachnameVorname) - ohne Leerzeichen dazwischen!", " _
Namenseingabe", "NachnameVorname")
For Zeile = 2 To ZeileMax
If Tabelle4.Cells(Zeile, 6).Value = Name Then
UserForm1.ListBox1.RowSource = Tabelle4.Range(Cells(Zeile, 6), Cells(Zeile, 7))
Exit Sub
End If
Next Zeile
MsgBox "Teilneher konnte nicht gefunden werden!", vbCritical, "Achtung"
End Sub

Das Problem ist, dass ich nicht weiß, wie ich die RowSource richtig eingebe... normalerweise würde ja bspw. UserForm1.ListBox1.RowSource = "Tabelle4!F2:G" & ZeileMaxListBox da stehen, was auch super funktioniert.
Vielen lieben Dank für Hilfreiche Kommentare.
Viele Grüße
Anzeige

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ListBox RowSource mit Variabler Zeile
05.09.2020 11:44:53
Nepumuk
Hallo Max,
teste mal:
Private Sub CommandButton6_Click()
    Dim strName As String
    Dim objZelle As Range
    
    Call ListBox1.Clear
    
    strName = InputBox("Bitte Name eingeben (NachnameVorname) - ohne Leerzeichen dazwischen!", _
        "Namenseingabe", "NachnameVorname")
    
    Set objZelle = Tabelle4.Columns(6).Find(What:=strName, _
        LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False)
    
    If Not objZelle Is Nothing Then
        With ListBox1
            .AddItem objZelle.Text
            .List(0, 1) = objZelle.Offset(0, 1).Text
        End With
        Set objZelle = Nothing
    Else
        MsgBox "Teilneher konnte nicht gefunden werden!", vbCritical, "Achtung"
    End If
End Sub

Gruß
Nepumuk
Anzeige
AW: ListBox RowSource mit Variabler Zeile
05.09.2020 11:53:21
Max
Vielen Dank für Ihre Antwort.
Leider streikt der Makro bereits bei ListBox.Clear. Ich habe noch UserForm2.ListBox1.Clear geschrieben, aber das funktioniert auch nicht.
Erneut vielen Dank für Ihre Hilfe
AW: ListBox RowSource mit Variabler Zeile
05.09.2020 12:27:57
Nepumuk
Hallo Max,
Leider streikt der Makro bereits bei ListBox.Clear.
Wie habe ich das zu verstehen?
Gruß
Nepumuk
Anzeige
AW: ListBox RowSource mit Variabler Zeile
05.09.2020 11:45:12
Oberschlumpf
Hi,
UserForm1.ListBox1.RowSource = "Tabelle4!F2:G" & ZeileMaxListBox
und wieso funktioniert das nicht, bzw was genau passiert bei Verwendung dieses Codes?
Ciao
Thorsten
AW: ListBox RowSource mit Variabler Zeile
05.09.2020 12:00:46
Daniel
Hi
Listbox1.RowSorce = "Tabelle4!F" & Zeile & ":G" & Zeile
Ergibt sich eigentlich aus dem, was du schon kennst, du musst da nur einen Schritt weiterdenken und die Zeile nicht nur am Ende, sondern auch in der Mitte des Codes einfügen, um den Adresstring für Rowsource zu erstellen.
Gruß Daniel
Anzeige
AW: ListBox RowSource mit Variabler Zeile
05.09.2020 12:31:38
Max
Super,
vielen Dank für Ihre Hilfe. Das hat funktioniert.
Einen schönen Tag noch!
AW: ListBox RowSource mit Variabler Zeile
05.09.2020 12:04:10
Werner
Hallo,
da würde ich auch mit Find arbeiten anstatt in einer Schleife über die Einträge zu hoppeln.
Private Sub CommandButton6_Click()
Dim Name As String, raFund As Range
Name = InputBox("Bitte Name eingeben (NachnameVorname) - ohne Leerzeichen dazwischen!", _
"Namenseingabe", "NachnameVorname")
If Not Name = vbNullString And Name  "NachnameVorname" Then
Name = Replace(Name, " ", "")
With Tabelle4
Set raFund = .Columns(6).Find(what:=Name, LookIn:=xlValues, lookat:=xlWhole)
If Not raFund Is Nothing Then
UserForm1.ListBox1.RowSource = raFund.Resize(, 2).Address
Else
MsgBox "Teilneher konnte nicht gefunden werden!", vbCritical, "Achtung"
End If
End With
End If
Set raFund = Nothing
End Sub
Gruß Werner
Anzeige
AW: ListBox RowSource mit Variabler Zeile
05.09.2020 12:32:56
Max
Vielen Dank für Ihre Hilfe.
Ich bin den umständlichen Weg gegangen, da ich mit dem Find meine Probleme habe... aber Ihre Lösung ist doch recht charmant. Vielleicht sollte ich mich etwas näher damit befassen.
Erneut vielen Dank!
Gerne u. Danke für die Rückmeldung und...
05.09.2020 12:44:10
Werner
Hallo,
...hier per Du.
Gruß Werner
AW: Gerne u. Danke für die Rückmeldung und...
06.09.2020 08:16:11
Max
Guten Tag,
noch eine kurze Frage als Nachtrag: Kann die Find Funktion auch mit mehreren Treffern funktionieren? Bei meinem Sachverhalt kann eine Person mehrere Programme besucht haben und ich würde gerne die Gesamttabelle so filtern, dass in einer ListBox die Programme einer gesuchten Person auftauchen.
Meine Bisherige ListBox hat so gearbeitet, dass mir nur die Gesamtzahl an teilgenommenen Programmen angezeigt wurde.
Erneut vielen Dank.
Anzeige
AW: Gerne u. Danke für die Rückmeldung und...
06.09.2020 11:05:22
Nepumuk
Hallo Max,
teste mal:
Private Sub CommandButton6_Click()
    Dim strName As String, strFirstAddress As String
    Dim objZelle As Range
    
    strName = InputBox("Bitte Name eingeben (NachnameVorname) - ohne Leerzeichen dazwischen!", _
        "Namenseingabe", "NachnameVorname")
    
    If strName <> vbNullString And StrPtr(strName) <> 0 Then
        
        ListBox1.RowSource = vbNullString
        Call ListBox1.Clear
        
        Set objZelle = Tabelle4.Columns(6).Find(What:=strName, _
            LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False)
        
        If Not objZelle Is Nothing Then
            
            strFirstAddress = objZelle.Address
            
            Do
                
                With ListBox1
                    .AddItem objZelle.Text
                    .List(0, 1) = objZelle.Offset(0, 1).Text
                End With
                
                Set objZelle = Tabelle4.Columns(6).FindNext(After:=objZelle)
                
            Loop Until objZelle.Address = strFirstAddress
            
            Set objZelle = Nothing
            
        Else
            MsgBox "Teilneher konnte nicht gefunden werden!", vbCritical, "Achtung"
        End If
    End If
End Sub

Gruß
Nepumuk
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

ListBox RowSource mit Variabler Zeile


Schritt-für-Schritt-Anleitung

  1. Vorbereitung der UserForm: Stelle sicher, dass Du eine UserForm hast, die eine ListBox enthält. In diesem Beispiel wird ListBox1 verwendet.

  2. VBA-Code für die Suche: Füge den folgenden Code in das Code-Fenster Deiner UserForm ein. Dieser Code setzt die RowSource der ListBox dynamisch basierend auf der Benutzereingabe:

    Private Sub CommandButton1_Click()
        Dim Name As String
        Dim Zeile As Long
        Dim ZeileMax As Long
        ZeileMax = Tabelle4.Cells(Rows.Count, 6).End(xlUp).Row
        Name = InputBox("Bitte Name eingeben (NachnameVorname) - ohne Leerzeichen dazwischen!", "Namenseingabe", "NachnameVorname")
    
        For Zeile = 2 To ZeileMax
            If Tabelle4.Cells(Zeile, 6).Value = Name Then
                UserForm1.ListBox1.RowSource = Tabelle4.Range(Cells(Zeile, 6), Cells(Zeile, 7)).Address
                Exit Sub
            End If
        Next Zeile
    
        MsgBox "Teilnehmer konnte nicht gefunden werden!", vbCritical, "Achtung"
    End Sub
  3. Testen der Funktion: Starte die UserForm und klicke auf den Button, um den Namen einzugeben. Die ListBox sollte entsprechend gefüllt werden.


Häufige Fehler und Lösungen

  • ListBox.Clear funktioniert nicht: Vergewissere Dich, dass Du den richtigen Verweis auf die ListBox verwendest. Beispiel: UserForm1.ListBox1.Clear muss korrekt sein.

  • Falsche RowSource: Wenn Du die RowSource einstellst, achte darauf, dass Du die korrekte Adresse verwendest. Der Code Tabelle4.Range(Cells(Zeile, 6), Cells(Zeile, 7)).Address gibt die richtige Adresse zurück.

  • Kein Treffer gefunden: Wenn der Name nicht gefunden wird, überprüfe die Schreibweise oder die Werte in der Tabelle. Verwende Trim um Leerzeichen zu entfernen.


Alternative Methoden

  • Anstelle der Schleife kannst Du die Find-Methode verwenden. Dies ist effizienter, insbesondere bei großen Datenmengen. Hier ein Beispiel:

    Private Sub CommandButton1_Click()
        Dim Name As String
        Dim objZelle As Range
    
        Name = InputBox("Bitte Name eingeben (NachnameVorname) - ohne Leerzeichen dazwischen!", "Namenseingabe", "NachnameVorname")
    
        Set objZelle = Tabelle4.Columns(6).Find(What:=Name, LookIn:=xlValues, LookAt:=xlWhole)
    
        If Not objZelle Is Nothing Then
            UserForm1.ListBox1.RowSource = objZelle.Resize(, 2).Address
        Else
            MsgBox "Teilnehmer konnte nicht gefunden werden!", vbCritical, "Achtung"
        End If
    End Sub

Praktische Beispiele

  • Beispiel 1: Wenn Du mehrere Einträge für eine Person möchtest, kannst Du eine Schleife verwenden, um alle übereinstimmenden Einträge hinzuzufügen:

    Dim strFirstAddress As String
    strFirstAddress = objZelle.Address
    
    Do
        With ListBox1
            .AddItem objZelle.Text
            .List(.ListCount - 1, 1) = objZelle.Offset(0, 1).Text
        End With
    
        Set objZelle = Tabelle4.Columns(6).FindNext(objZelle)
    
    Loop While Not objZelle Is Nothing And objZelle.Address <> strFirstAddress

Tipps für Profis

  • Optimierung der ListBox: Verwende ListBox1.ColumnCount = 2, um mehrere Spalten in der ListBox anzuzeigen und den Inhalt besser zu strukturieren.

  • Fehlerbehandlung: Implementiere On Error Resume Next, um Fehler im Code abzufangen und die Benutzererfahrung zu verbessern.

  • Dynamische Anpassungen: Du kannst die ListBox dynamisch anpassen, indem Du die RowSource und die Anzahl der Spalten je nach Bedarf änderst.


FAQ: Häufige Fragen

1. Wie kann ich die Anzahl der angezeigten Spalten in der ListBox ändern?
Du kannst ListBox1.ColumnCount = X verwenden, wobei X die Anzahl der Spalten ist, die Du anzeigen möchtest.

2. Funktioniert dieser Code in allen Excel-Versionen?
Ja, der Code sollte in den meisten modernen Excel-Versionen funktionieren, sofern Du die VBA-Umgebung verwendest.

3. Kann die Find-Funktion auch mehrere Treffer anzeigen?
Ja, Du kannst die FindNext-Methode verwenden, um alle Vorkommen eines Namens zu finden und in die ListBox hinzuzufügen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige