Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: ListBox auf UserForm dynamisch befüllen

ListBox auf UserForm dynamisch befüllen
29.04.2019 19:00:55
Daniel
Hi :-)
Ich hab mal wieder ein Problem...
Ich öffne ein UserForm über einen Klick in eine Zelle:
If Target.Column = 6 And Target.Row >= 7 And Target.Row  "" Then
UserForm1.Caption = ActiveCell.Text
UserForm1.Show
End If

Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Tja, aber die Frage fehlt !!! ... owT
29.04.2019 19:06:54
Matthias
AW: ListBox auf UserForm dynamisch befüllen
29.04.2019 19:09:51
Daniel
Oh man sorry...meine Maus macht zur Zeit immer Doppelklicks - ich war noch nicht fertig...
Auf dieser UF habe ich eine ListBox1.
NORMALERWEISE befülle ich meine ListBoxen so:
Private Sub UserForm_Initialize()
Dim ende As Long
With ListBox1
.ColumnCount = 2
End With
ende = Sheets("Tabelle1").Cells(Rows.Count, 3).End(xlUp).Row
ListBox1.RowSource = "Tabelle1!D6:D" & ende
End Sub
In diesem Fall ist das anders...
Der Inhalt der Zelle beschreibt den Namen eines Tabellenblatts - und die RowSource soll jetzt so gesetzt werden, dass sie die Zellen D6:D bis ende nimmt.
Ich hab es schon so versucht:
With Sheets(ActiveCell.Text)
ende = .Cells(Rows.Count, 6).End(xlUp).Row
ListBox1.RowSource = "'" & .Name & "'!D6:D" & ende
End With
aber da wird die ListBox lediglich mit allem gefüllt, was BIS D6 in der Tabelle steht.
Ändere ich es auf:
With Sheets(ActiveCell.Text)
ende = .Cells(Rows.Count, 6).End(xlUp).Row
ListBox1.RowSource = "'" & .Name & "'!D6:D565" & ende
End With
dann habe ich alles VON D6 BIS D565 in der ListBox.
Aber das kann ja nicht Sinn und Zweck der Sache sein...oder?
Weiß da jemand Abhilfe und evtl. eine elegantere Lösung?
Danke :-)
Daniel
Anzeige
Spalte 'D' = 4
29.04.2019 19:12:15
Sepp
Hallo Daniel,
ende = .Cells(.Rows.Count, 4).End(xlUp).Row

AW: ListBox auf UserForm dynamisch befüllen
29.04.2019 19:15:22
Nepumuk
Hallo Daniel,
du willst Spalte D in der ListBox haben suchst aber die letzte Zeile in Spalte F:
ende = .Cells(Rows.Count, 6).End(xlUp).Row
Ist das richtig?
Gruß
Nepumuk
Anzeige
AW: ListBox auf UserForm dynamisch befüllen
29.04.2019 19:18:29
Daniel
Oh mein Gott!
Ich brauch Urlaub!
Selbstverständlich ist das F!
Wie konnte ich das nicht sehen?!
Danke schön an Sepp und Nepumuk!
Ihr wart meine Retter...und ich einfach nur dumm...
Ich geh mich schämen...
MfG
Daniel
AW: ListBox auf UserForm dynamisch befüllen
29.04.2019 21:28:06
Luschi
Hallo Daniel,
genau aus diesem Grund genutze ich dieses Konstrukt:
ende = .Cells(.Rows.Count, "F").End(xlUp).Row
Damit hat auch die Fingerzählerei ein Ende, wenn ich Spalte 'AAA' meine (703).
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Fingerzählerei..?...
29.04.2019 21:49:09
Mullit
wäre nat. hier heftig, aber brauchen wir doch nich, haben doch unser Direktfenster:
?range("BFZ1").Column
1534 

...bzw eine kl. Sub im VBEditor-Addin...
Gruß, Mullit
...Zumal man ja auch nicht wissen kann, ...
30.04.2019 00:22:23
Luc:-?
…ob nicht irgendein zukünftiger vbCompiler das nicht mehr toleriert. ;-)
Beim VBA-Adapter von LO/OOcalc dürfte es schon jetzt so sein, denn der verstand bisher nur „sauberes“ VBA…
Gruß, Luc :-?
„Der beste Beweis für intelligentes Leben im Universum ist, dass noch niemand versucht hat, Kontakt mit uns aufzunehmen.“ H.Lesch, 2018, Sonneberg
Deshalb Intelligenz steigern mit …

Anzeige
probier mal den Punkt vor Rows also:
29.04.2019 19:17:25
Matthias
Hallo
probier mal den Punkt vor Rows
With Sheets(ActiveCell.Text)
ende = .Cells(.Rows.Count, 6).End(xlUp).Row
ListBox1.RowSource = "'" & .Name & "'!D6:D" & ende
End With

Nicht getestet!
Gruß Matthias
AW: probier mal den Punkt vor Rows also:
29.04.2019 19:19:56
Daniel
Danke Matthias :-)
Nepumuk und Sepp haben mich darauf hingewiesen, dass ich ja in Spalte F (6) und nicht in D (4) suche...da kann das ja nix werden ;-)
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

ListBox auf UserForm dynamisch befüllen


Schritt-für-Schritt-Anleitung

Um eine ListBox auf einem UserForm dynamisch mit Inhalten aus einer Excel-Tabelle zu befüllen, kannst du folgende Schritte befolgen:

  1. UserForm erstellen: Öffne den VBA-Editor (ALT + F11) und erstelle ein neues UserForm.

  2. ListBox hinzufügen: Füge eine ListBox zu deinem UserForm hinzu (nennen wir sie ListBox1).

  3. UserForm öffnen: Verwende den folgenden Code, um das UserForm über einen Klick in eine bestimmte Zelle zu öffnen:

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        If Target.Column = 6 And Target.Row >= 7 And Target.Value <> "" Then
            UserForm1.Caption = ActiveCell.Text
            UserForm1.Show
        End If
    End Sub
  4. ListBox befüllen: Im UserForm_Initialize-Ereignis kannst du die ListBox dynamisch füllen:

    Private Sub UserForm_Initialize()
        Dim ende As Long
        With ListBox1
            .ColumnCount = 2
        End With
        ende = Sheets("Tabelle1").Cells(Rows.Count, 6).End(xlUp).Row
        ListBox1.RowSource = "Tabelle1!D6:D" & ende
    End Sub
  5. Dynamische Anpassung: Um sicherzustellen, dass die RowSource der ListBox dynamisch an den Namen des aktiven Tabellenblatts angepasst wird, kannst du folgenden Code verwenden:

    With Sheets(ActiveCell.Text)
        ende = .Cells(Rows.Count, 6).End(xlUp).Row
        ListBox1.RowSource = "'" & .Name & "'!D6:D" & ende
    End With

Häufige Fehler und Lösungen

  1. ListBox wird nicht korrekt befüllt: Überprüfe, ob du die richtige Spalte für ende verwendest. Wenn du die Daten aus Spalte D holen möchtest, stelle sicher, dass du .Cells(Rows.Count, 4).End(xlUp).Row verwendest.

  2. Falsche RowSource: Wenn die RowSource nicht korrekt gesetzt wird, stelle sicher, dass der Name des Tabellenblatts genau mit dem Text in der aktiven Zelle übereinstimmt.

  3. Doppelklick-Probleme: Wenn du beim Öffnen des UserForms auf Doppelklick-Probleme stößt, könnte es an der Maus liegen. Achte darauf, dass der Code zum Öffnen des Forms nur beim Einzelklick ausgeführt wird.


Alternative Methoden

  • Excel VBA ComboBox dynamisch füllen: Ähnlich wie bei der ListBox kannst du auch eine ComboBox dynamisch füllen, indem du die RowSource-Eigenschaft anpasst und die Initialisierung in einem ähnlichen Format vornimmst.

  • Verwendung von Arrays: Eine weitere Methode zur dynamischen Befüllung ist die Verwendung eines Arrays, um die Daten aus der Tabelle zu sammeln und anschließend in die ListBox zu laden.

    Dim myArray() As Variant
    myArray = Application.Transpose(Sheets("Tabelle1").Range("D6:D" & ende).Value)
    ListBox1.List = myArray

Praktische Beispiele

Angenommen, du hast eine Tabelle mit Verkaufsdaten und möchtest eine ListBox erstellen, die die Namen der Produkte anzeigt. Du kannst den oben genannten Code verwenden, um die ListBox dynamisch zu befüllen.

Hier ist ein Beispiel:

Private Sub UserForm_Initialize()
    Dim ende As Long
    With ListBox1
        .ColumnCount = 1
    End With
    ende = Sheets("Verkaufsdaten").Cells(Rows.Count, 1).End(xlUp).Row
    ListBox1.RowSource = "Verkaufsdaten!A2:A" & ende
End Sub

Tipps für Profis

  • Vermeide magische Zahlen: Verwende Konstanten oder benannte Bereiche, um die Pflege des Codes zu erleichtern.

  • Fehlerbehandlung: Füge Fehlerbehandlungsroutinen hinzu, um mögliche Laufzeitfehler zu vermeiden. Dies kann durch On Error Resume Next und On Error GoTo 0 erfolgen.

  • Optimierung der Performance: Bei großen Datenmengen kann es sinnvoll sein, die Berechnung während des Füllens der ListBox auszuschalten, um die Performance zu steigern:

    Application.ScreenUpdating = False
    ' Füllcode hier
    Application.ScreenUpdating = True

FAQ: Häufige Fragen

1. Wie kann ich die ListBox so einstellen, dass sie mehrere Spalten anzeigt?
Du kannst die ColumnCount-Eigenschaft der ListBox anpassen und die Daten entsprechend formatieren, um sie anzuzeigen.

2. Was ist der Unterschied zwischen einer ListBox und einer ComboBox?
Eine ListBox zeigt mehrere Einträge gleichzeitig an, während eine ComboBox eine Dropdown-Liste ist, die nur einen Eintrag gleichzeitig anzeigt, aber auch das Eingeben von neuen Werten erlaubt.

3. Kann ich die ListBox bei Änderungen in der Tabelle automatisch aktualisieren?
Ja, du kannst die UserForm_Initialize-Methode so anpassen, dass sie bei jeder Änderung der Tabelle aufgerufen wird, um die ListBox erneut zu befüllen.

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