127132
Goto Top

Excel VBA: Listbox per AddItem befüllen

Hallo miteinander!

Meine Wege haben mich jetzt auch zu VBA geführt. Leider fehlt mir da das erweiterte Grundwissen.
Ausgangslage:
Ich hab eine Tabelle mit mehreren Spalten (A bis F)
Die würde ich alle gerne in einem Userform in einer Listbox einlesen/anzeigen lassen.

Im Netz gesucht und nicht wirklich was brauchbares gefunden. Es geht zwar irgendwie mit
Listbox1.RowSorce = "Tabelle!A1:F10"  
aber das ist zum einen statisch (was wenn ich mehrere zeilen hab?) und zum anderen kann ich da dann nicht mehr viel weiterarbeiten.
Ich müsste die Listbox wohl mit AddItem befüllen.
Okay...weitergesucht und auch was gefunden. Leider klappt das nur für Spalte A.
lZeile = 2                                                        
     Do While Trim(CStr(Tabelle1.Cells(lZeile, 1).Value)) <> ""          
         ListBox1.AddItem Trim(CStr(Tabelle1.Cells(lZeile, 1).Value))  
         lZeile = lZeile + 1                                           
     Loop

Wie krieg ich denn da die restlichen Spalten noch unter? Da muss ich wohl eine weitere Variable für die Spalten setzen. Analog zu lZeile dann lSpalte und der Code sollte dann so heißen (nehme ich an):
ListBox1.AddItem Trim(CStr(Tabelle1.Cells(lZeile, lSpalte).Value))  

Ich bin da für jede Hilfe dankbar.

Content-Key: 302364

Url: https://administrator.de/contentid/302364

Printed on: April 19, 2024 at 21:04 o'clock

Mitglied: 114757
Solution 114757 Apr 20, 2016 updated at 11:46:52 (UTC)
Goto Top
Moin.
Excel VBA - Auswahl aus Listbox bearbeiten
aber das ist zum einen statisch (was wenn ich mehrere zeilen hab?)
Du kannst der List-Eigenschaft auch einen Range zuweisen der muss nicht statisch sein sondern kann z.B. alle belegten Zellen ermitteln und dann der List-Eigenschaft zuweisen.
Private Sub UserForm_Initialize()
    Set Rng = Range("A1").CurrentRegion  
    With ListBox1
        .ColumnCount = Rng.Columns.Count
        .List = Rng.Value
    End With
End Sub
oder auch so mit Überschriften in der Listbox die in der ersten Zeile stehen.
Private Sub UserForm_Initialize()
    Set Rng = Range("A2", Range("A2").CurrentRegion.SpecialCells(xlCellTypeLastCell))  
    With ListBox1
        .ColumnHeads = True
        .ColumnCount = Rng.Columns.Count
        .RowSource = Rng.Address
    End With
End Sub
Gibt's hier jede Menge Beispiel-Sheets im Forum hier noch eins:
Mehrere Zeihlen in "Listbox" einfügen

Gruß jodel32
Mitglied: 127132
127132 Apr 20, 2016 at 12:08:21 (UTC)
Goto Top
Beispiel zwei ist im Grunde das, was ich gesucht hab.
Dieses xlCellTypeLastCell nimmt also alle Zellen, in denen was drinsteht?

Weil du da ein Crack zu sein scheinst, würde ich da noch ein bisschen weitergehen, wenn du magst.

Eigentliches Ziel der ganzen Aktion ist, dass ich die Einträge in den Zeilen in verschiedene Tabellen per Button verteile. Und zwar nach einem Merkmal, das in Spalte 3 zu finden ist.
Das funktioniert mit folgendem Code:
Private Sub CommandButton1_Click()
    Dim i As Long
    Dim lngTabelle As Long
    With Tabelle1
        For i = .Cells(Rows.Count, 3).End(xlUp).Row To 2 Step -1
            Select Case CStr(.Cells(i, 3))
              Case "X": lngTabelle = 2  
              Case "Y": lngTabelle = 3  
            End Select
                .Rows(i).Copy Worksheets(lngTabelle).Cells(Worksheets(lngTabelle).Cells(Rows.Count, 1).End(xlUp).Row + 1, 1)
                .Rows(i).Clear
        Next
    Call UserForm_Initialize
    End With
End Sub

Vorteil: klappt einwandfrei.
Nachteil: das passiert für alle Einträge in der Tabelle.

Ich möchte da dass das nur für die Einträge passiert, die ich mit der Maus in der ListBox markiere.
Da muss wohl irgendwas mit
If ListBox1.ListIndex >= 0 Then
oder in der Richtung machen.

Wenn's hilft, ich hätte eine kleine Beispieldatei. Kann man die hier uploaden?
Hab da Uploaded, weiss aber nicht, ob das hier gern gesehen ist.
http://ul.to/deel8lfg
Mitglied: 114757
Solution 114757 Apr 20, 2016 updated at 13:30:44 (UTC)
Goto Top
Die Eigenschaft SelectedIndices der Listbox gibt dir alle selektierten Indizes der Listbox als Array zurück.
Darüber kannst du dann per FOR-Schleife iterieren, und schon hast das gewünschte...
Mitglied: 127132
127132 Apr 20, 2016 at 13:44:35 (UTC)
Goto Top
Okay, ich werd da mal ein bisschen rumspielen.
Danke schon mal.
Mitglied: 114757
Solution 114757 Apr 20, 2016 updated at 15:05:06 (UTC)
Goto Top
Sorry ich muss mich korrigieren, die "SelectedIndices" Eigenschaft gibt es in der VBA-Variante der Listbox nicht, dort kannst du es aber stattdessen so machen um alle selektierten Einträge zu bekommen:
if ListBox1.ListCount > 0 then
 For i = 0 To ListBox1.ListCount - 1
    If ListBox1.Selected(i) = True Then
        MsgBox ListBox1.List(i)
    End If
 Next
End if