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

Forumthread: ListBox RowSource füllen

ListBox RowSource füllen
01.12.2015 21:08:33
Christian
Hallo,
ich möchte einen User gerne mit verschiedenen UserForms durch eine Abfrage leiten, dazu soll er schrittweise Eingaben machen, von denen wiederum das folgende Eingabefenster abhängt.
Es beginnt mit der ersten UserForm, die eine ComboBox anbietet
Public Sub UserForm_Initialize()
With Me.ComboBox1
.AddItem "Alfa"
.AddItem "Delta"
.AddItem "Beta"
.ListIndex = 3
End With
End Sub

Über den OK-Button folgt die zweite UserForm. Mit Betätigen des Button schließt die erste _ UserForm leider nicht. Das ist allerdings das kleinere Problem

Public Sub CommandButton2_Click()
UserForm4.Show
Unload Me
End Sub

In der zweiten UserForm, darf der User nun abhängig von seiner Eingabe aus einer Liste von Einträgen auswählen. Dazu habe ich auf einem Worksheet mehrere Splaten mit Daten gefüllt. Abhängig von der Eingabe soll eine Spalte ausgewählt werden. Ich komme jedoch mit der Funktion .RowSource nicht zurecht.
Private Sub UserForm_Initialize()
With ListBox1
.ColumnCount = 1
ListBox1.RowSource = "Tabelle1!B1:B5" 'Das hier funktioniert wie gewünscht
'Das funktioniert nicht...
'ListBox1.RowSource = Worksheets(1).Range(Cells(2, 1), Cells(9, 1))
'..und so etwas in der Art hätte ich gerne
'ListBox1.RowSource = Worksheets(1).Range(Cells(UserForm1.ComboBox1.ListIndex, 1), Cells( _
UserForm1.ComboBox1.ListIndex, 1))
End With
End Sub

Kann mir jemand weiterhelfen?
Danke im Voraus

Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ListBox RowSource füllen
01.12.2015 21:48:47
Rudi
Hallo,
ListBox1.List= Worksheets(1).Range(Cells(UserForm1.ComboBox1.ListIndex, 1), Cells( _
UserForm1.ComboBox1.ListIndex, 1)).Value
Gruß
Rudi

AW: ListBox RowSource füllen
01.12.2015 22:37:12
Christian
Das funktioniert. Danke
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige

Infobox / Tutorial

ListBox RowSource in Excel VBA Füllen


Schritt-für-Schritt-Anleitung

Um eine ListBox in einem Excel UserForm mit Daten aus einem Worksheet zu füllen, kannst du die folgende Schritt-für-Schritt-Anleitung verwenden:

  1. Erstelle ein UserForm: Öffne den VBA-Editor in Excel (Alt + F11) und erstelle ein neues UserForm.

  2. Füge eine ComboBox und eine ListBox hinzu: Platziere eine ComboBox und eine ListBox auf deinem UserForm.

  3. Fülle die ComboBox: Im UserForm_Initialize-Ereignis kannst du die ComboBox mit Werten füllen:

Public Sub UserForm_Initialize()
    With Me.ComboBox1
        .AddItem "Alfa"
        .AddItem "Delta"
        .AddItem "Beta"
        .ListIndex = 0
    End With
End Sub
  1. Definiere die ListBox: Im nächsten Schritt musst du die ListBox abhängig von der Auswahl in der ComboBox füllen. Das macht man im UserForm_Initialize oder im Click-Ereignis eines Buttons:
Private Sub CommandButton2_Click()
    UserForm4.Show
    Unload Me
End Sub
  1. Setze die RowSource für die ListBox: Um die RowSource der ListBox festzulegen, kannst du die folgenden Zeilen verwenden:
Private Sub UserForm_Initialize()
    With ListBox1
        .ColumnCount = 1
        .RowSource = "Tabelle1!B1:B5" 'Direkte Zuweisung funktioniert
        ' Dynamische Zuweisung:
        .List = Worksheets(1).Range(Cells(UserForm1.ComboBox1.ListIndex + 1, 1), Cells(UserForm1.ComboBox1.ListIndex + 5, 1)).Value
    End With
End Sub

Häufige Fehler und Lösungen

  • Fehler: ListBox zeigt keine Daten an: Stelle sicher, dass die RowSource korrekt definiert ist. Überprüfe den Bereich in den Excel-Zellen, den du zuweisen möchtest.

  • Problem mit der dynamischen Zuweisung: Wenn du versuchst, die RowSource dynamisch zu setzen, achte darauf, dass die Indizes korrekt sind und dass du die Range-Eigenschaft richtig verwendest.

  • ListBox bleibt leer: Überprüfe, ob der UserForm_Initialize-Code tatsächlich ausgeführt wird. Debugge gegebenenfalls den Code, um sicherzustellen, dass der richtige Bereich ausgewählt wird.


Alternative Methoden

Neben der Verwendung der RowSource gibt es auch alternative Methoden, um eine ListBox zu füllen:

  • Verwendung der List-Eigenschaft: Du kannst die List-Eigenschaft verwenden, um Werte direkt zuzuweisen:
ListBox1.List = Worksheets(1).Range("B1:B5").Value
  • Hinzufügen von Elementen mit AddItem: Eine weitere Möglichkeit ist die Verwendung von AddItem, um die ListBox manuell zu befüllen:
For i = 1 To 5
    ListBox1.AddItem Worksheets(1).Cells(i, 2).Value
Next i

Praktische Beispiele

Hier sind einige praktische Beispiele, die dir helfen können, die ListBox mit verschiedenen Methoden zu füllen:

  1. Füllen mit einer festen Liste:
Private Sub UserForm_Initialize()
    ListBox1.AddItem "Eintrag 1"
    ListBox1.AddItem "Eintrag 2"
    ListBox1.AddItem "Eintrag 3"
End Sub
  1. Füllen aus einer Spalte in einem Worksheet:
Private Sub UserForm_Initialize()
    Dim lastRow As Long
    lastRow = Worksheets(1).Cells(Rows.Count, 2).End(xlUp).Row
    ListBox1.List = Worksheets(1).Range("B1:B" & lastRow).Value
End Sub

Tipps für Profis

  • Nutze Named Ranges: Wenn du oft auf bestimmte Bereiche zugreifen musst, erstelle benannte Bereiche in Excel. So kannst du die RowSource einfacher setzen:
ListBox1.RowSource = "MeinNamedBereich"
  • Effiziente Datenverwaltung: Halte deine Daten in einer strukturierten Form, um das Füllen der ListBox zu vereinfachen. Verwende Tabellen, um dynamisch auf Änderungen zu reagieren.

FAQ: Häufige Fragen

1. Wie setze ich die RowSource dynamisch?
Du kannst die RowSource dynamisch setzen, indem du die Range-Eigenschaft mit Variablen verwendest. Stelle sicher, dass die Indizes korrekt sind.

2. Warum wird meine ListBox nicht aktualisiert, wenn ich die ComboBox ändere?
Stelle sicher, dass du die ListBox nach jeder Änderung der ComboBox aktualisierst, indem du den entsprechenden Code im ComboBox_Change-Ereignis platzierst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige