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

Forumthread: Listbox füllen

Listbox füllen
23.08.2005 10:22:17
Walter
Hallo Zusammen,
meine Listbox kriege ich nicht gefüllt.
Der Bereich ist: "Muster-Mappe" "AF91:AJ338"
kann sich jedoch verändern, durch einfügen oder löschen.
Aber erst mal füllen ?
Gruss walter mb
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Listbox füllen NACHTRAG
23.08.2005 10:32:32
Walter
Hallo,
habe vergessen, meine Listbox befindet sich auf einer UF,
gruss walter mb
Ja aber ...
23.08.2005 16:32:18
Walter
Hallo Peter,
herzlichen Dank für die Unterstützung und Hinweise.
Habe was zusammengebastelt hier:

Private Sub UserForm_Initialize()
Sheets("Kulanzblatt-VK").Activate
With ListBox1
.ColumnCount = 5                  'Anzahl der Spalten
.ColumnHeads = True               'Überschriften werden angezeigt
.RowSource = "AF91:AJ338"         'Die Quelle der Liste
.ColumnWidths = "1cm;1cm;3cm;3cm;4cm"
End With
End Sub

Funktioniert auch.
Nun noch folgendes 1. Der Bereich wird ja verändert, wie kriege ich das hin, also
RowSoure variable, AJ338 kann also > oder 2. Ich möchte gegebenfalls die Daten anklicken (geht auch)
und dann über die darüberliegende Textbox1 kopieren,
die kompl.Zeile um zu verändern und dann wieder mit einem
Command-Button reinkopieren oder kann man die Veränderung
auch in der Listbox durchführen ?
Ich hoffe ich habe nicht zuviel verlangt, bin seit gestern abend am fummel, bin schon über den Teilerfolg glücklich.
Gruß walter mb
Anzeige
AW: Ja aber ...
23.08.2005 17:39:16
Peter
Servus, zu 1 (variabler gehts nicht alles flexibel):


      
Private Sub UserForm_Initialize()
Dim lzeile As Long
Dim strSh As String, strSp As String, strSpEnde As String
Dim intSpStart As Integer, intStartZeile As Integer, intSpEnde As Integer
strSh = "Tabelle1" 
' Sheet wird festgelegt
intSpStart = 1 ' Spalte A wird festgelegt
intSpEnde = 2 ' Spalte B wird festgelegt
lzeile = Sheets(strSh).Cells(Sheets(strSh).Rows.Count, intSpEnde).End(xlUp).Row ' letzte Zeile wird ermittelt
intStartZeile = 1 ' Startzeile wird festgelegt
        Select Case intSpStart
            
Case 1: strSp = "A"
            
Case 2: strSp = "B"
            
Case 3: strSp = "C"
        
End Select
        
Select Case intSpEnde
            
Case 1: strSpEnde = "A"
            
Case 2: strSpEnde = "B"
            
Case 3: strSpEnde = "C" ' usw. Spaltennummer ist zu erfahren durch eingabe von =Spalte() in entsp. Spalte
        End Select
    
With Sheets(strSh)
        
With Me.ListBox1
            .ColumnCount = intSpEnde - intSpStart + 1              
'Anzahl der Spalten
            .ColumnHeads = True               'Überschriften werden angezeigt
            .RowSource = strSp & intStartZeile & ": " & strSpEnde & lzeile    'Die Quelle der Liste"
            .ColumnWidths = "1cm;1cm;3cm;3cm;4cm"
        
End With
    
End With
End Sub 


zu 2: keine Ahnung was du meinst?
MfG Peter
Anzeige
AW: Ja aber ...
23.08.2005 19:46:36
Walter
Hallo Peter,
herzlichen Dank für DEINE Unterstützung.
Habe hier das Makro, wenn ich die Zeilen von mir wieder aktiviere wird beim drücken
des Command-Button gefüllt.
Leider klappt das mit deinem Beispiel nicht, habe schon mit Buchstaben getestet, wie Du siehst.

Private Sub CommandButton2_Click()
'---------------wenn ich dies "freimache" wird gfüllt -----------------------------
' Sheets("Kulanzblatt-VK").Activate
' With ListBox1
'     .ColumnCount = 5                  'Anzahl der Spalten
'     .ColumnHeads = True               'Überschriften werden angezeigt
'     .RowSource = "AF91:AJ338"         'Die Quelle der Liste
'     .ColumnWidths = "1cm;1cm;3cm;3cm;4cm"
'  End With
Dim lzeile As Long
Dim strSh As String, strSp As String, strSpEnde As String
Dim intSpStart As Integer, intStartZeile As Integer, intSpEnde As Integer
strSh = "Kulanzblatt-VK"                      ' Sheet wird festgelegt
intSpStart = 32                          ' Spalte A wird festgelegt
intSpEnde = 36                           ' Spalte B wird festgelegt
lzeile = Sheets(strSh).Cells(Sheets(strSh).Rows.Count, intSpEnde).End(xlUp).Row
' letzte Zeile wird ermittelt
intStartZeile = 32                       ' Startzeile wird festgelegt
Select Case intSpStart
Case 1: strSp = "32"
Case 2: strSp = "33"
Case 3: strSp = "34"
Case 4: strSp = "35"
Case 5: strSp = "36"
'Case 1: strSp = "AF"
'Case 2: strSp = "AG"
'Case 3: strSp = "AH"
'Case 4: strSp = "AI"
'Case 5: strSp = "AJ"
End Select
Select Case intSpEnde
Case 1: strSp = "32"
Case 2: strSp = "33"
Case 3: strSp = "34"
Case 4: strSp = "35"
Case 5: strSp = "36"
'usw. Spaltennummer ist zu erfahren durch eingabe von =Spalte() in entsp. Spalte
End Select
With Sheets(strSh)
With VK_Namen.ListBox1
.ColumnCount = intSpEnde - intSpStart + 1              'Anzahl der Spalten
.ColumnHeads = True               'Überschriften werden angezeigt
.RowSource = strSp & intStartZeile & ": " & strSpEnde & lzeile    'Die Quelle der Liste"
.ColumnWidths = "1cm;1cm;3cm;3cm;4cm"
End With
End With
End Sub

Zu 2.:

Private Sub CommandButton5_Click()
'Sub NW_ProvBlatt_Verkäufer_Löschen()
Sheets("Kulanzblatt-VK").Select
Sheets("Kulanzblatt-VK").Unprotect ("ww")                   'so hebt richtig auf
z = ActiveCell().Row
If ActiveSheet.Range(Cells(z, 33), Cells(z, 36)).Select Then
Antwort = MsgBox("Zeile wirklich Löschen ?", vbYesNo)
If Antwort = vbNo Then
Worksheets("Kulanzblatt-VK").Activate
Else: Selection.Delete
End If
End If
End Sub

Mit diesem Makro habe ich auf der Mappe immer die Zeile gelöscht, nun brauch ich das
für die Listbox,
geht das ?
Gruss Walter mb
Anzeige
AW: Ja aber ...
23.08.2005 20:19:27
Peter
Servus,
mal eben flott vor Büroschluss und Sandsackaufstellen :( .
Hmmm was mir als erstes auffällt ändere die Zeilen Case 1: um in Case 32: strSp = "AF", usw.
Alles andere schau ich mir heut abend daheim hoffentlich im trockenen an.
MfG Peter
AW: Ja aber ...
23.08.2005 20:49:33
Walter
Hallo Peter,
Danke für die schnelle Info, hoffentlich hast Du nicht zu viel Wasser !!!!!!!!!!!!!!!
Wünsche Dir das es etwas Trocken bleibt...
Gehe davon aus das Du im Allgäu wohnts, war letzten Freitag noch in Füssen.
Habe geändert, leider ohne Funktion.
Die lösch und Zeile einfügen Funktion klappt, leider kann ich keine Daten dann einfügen,
dafür hab ich direkt über die ListBox eine Textbox1.
Gruss Walter mb
Anzeige
AW: Ja aber ...
23.08.2005 22:01:45
Walter
Hallo Peter,
wenn Du noch helfen kannst, sonst gehe ich morgen nochmal ans Forum, damit Du nicht
belästigt wirst, Hoch-Wasser ist schlimm genug.
Sag nur kurz bescheid.
Habe folgendes gefunden und klappt:
TextBox22 = ListBox1.List(ListBox1.ListIndex, 1)
damit hol ich mir den Wert raus, ich muß aber beide Spalten in die Textbox haben.
Also 1 + 2 , klappt so nicht:
TextBox22 = ListBox1.List(ListBox1.ListIndex, 1 + 2)
Dann möchte ich bearbeiten und dies von der Textbox aus wieder zurück kopiert haben,
damit die Änderung wirksam ist.
Gruß Walter mb
Anzeige
letzter Versuch...
24.08.2005 12:45:36
Peter
Servus,
bin doch kein Schwaab ;) ne so schlimm wars bei uns im Lkr. Ro. nicht, hatte nur Schwierigkeiten heimzukommen.
So nun zu deinem Prob. Die Listbox wird in dem Bsp. File gefüllt und bei Klick auf die entsprechende Zeile kommt leider immer Spalte 1 in die Textbox, hab leider keinen Plan wie ich die anderen Spalten abfragen soll :(
Das mit dem ändern in der Tabelle nach Änderung in der Textbox krieg ich leider auch nicht hin, da ich glaube das man irgendwie eine Public Variable für den ListBoxIndex nehmen müsste.
Sry :( hoffe es hilft trotzdem.
https://www.herber.de/bbs/user/25981.xls
Anzeige
AW: Vielleicht hat noch jemand eine Idee ?
24.08.2005 13:29:53
Walter
Hallo Peter,
herzlichen Dank für die Info, habe etwas angepasst, funktioniert.
Mit der Selektion ist auch egal, bleibt es halt bei einer Zelle und ich setze daneben noch eine Textbox.
Jedoch muß ich die Möglichkeit haben, diese in die Listbox einzutragen, bzw. in die Mappe und dann wieder mit initialisieren zu Laden. (Das geht mit einem Command-Button)
Vielleicht kann mir noch einer helfen ?
Gruß Walter
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Listbox in Excel mit VBA füllen


Schritt-für-Schritt-Anleitung

Um eine Listbox in einem UserForm mit Excel VBA zu füllen, kannst du die folgenden Schritte befolgen:

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

  2. Listbox hinzufügen: Ziehe eine Listbox (ListBox1) auf das UserForm.

  3. Code im UserForm-Initialize-Event: Füge den folgenden Code in das UserForm_Initialize-Ereignis ein:

    Private Sub UserForm_Initialize()
       Sheets("Kulanzblatt-VK").Activate
       With ListBox1
           .ColumnCount = 5                  ' Anzahl der Spalten
           .ColumnHeads = True               ' Überschriften werden angezeigt
           .RowSource = "AF91:AJ338"         ' Die Quelle der Liste
           .ColumnWidths = "1cm;1cm;3cm;3cm;4cm"
       End With
    End Sub
  4. Datenquelle anpassen: Stelle sicher, dass der RowSource-Bereich dynamisch angepasst wird, wenn sich die Daten ändern. Du kannst dies tun, indem du den Code anpasst, um die letzte Zeile automatisch zu finden.

  5. Daten einfügen: Verwende einen Command-Button, um die Listbox mit neuen Daten zu befüllen:

    Private Sub CommandButton1_Click()
       ' Fülle die Listbox mit Daten
       Call ListboxFüllen
    End Sub
  6. Daten in die Listbox einfügen: Erstelle eine separate Subroutine, um die Listbox zu befüllen:

    Sub ListboxFüllen()
       ' Beispielcode für das Füllen der Listbox
       Dim i As Long
       For i = 1 To 10
           ListBox1.AddItem "Eintrag " & i
       Next i
    End Sub

Häufige Fehler und Lösungen

  • Listbox bleibt leer: Überprüfe, ob der RowSource korrekt ist und ob der Bereich tatsächlich Daten enthält.
  • Fehlermeldung beim Füllen: Stelle sicher, dass du die richtige Syntax verwendest und dass die Daten in der angegebenen Quelle vorhanden sind.
  • Dynamischer Bereich funktioniert nicht: Verwende den Code zur Bestimmung der letzten Zeile, um sicherzustellen, dass der RowSource immer aktuell ist.

Alternative Methoden

  • VBA ListBox befüllen: Anstelle des RowSource kannst du die Listbox auch manuell mit .AddItem befüllen.
  • Verwendung von Arrays: Du kannst die Daten in ein Array laden und dann die Listbox mit einer Schleife befüllen.

    Dim DatenArray As Variant
    DatenArray = Range("AF91:AJ338").Value
    For i = LBound(DatenArray) To UBound(DatenArray)
       ListBox1.AddItem DatenArray(i, 1)
    Next i

Praktische Beispiele

Hier sind einige praktische Beispiele, wie du die Listbox füllen kannst:

  1. Füllen mit einer Tabelle:

    Private Sub UserForm_Initialize()
       Dim letzteZeile As Long
       letzteZeile = Sheets("Kulanzblatt-VK").Cells(Rows.Count, 1).End(xlUp).Row
       ListBox1.RowSource = "A1:A" & letzteZeile
    End Sub
  2. Daten aus mehreren Spalten:

    Private Sub UserForm_Initialize()
       Dim i As Long
       For i = 1 To 10
           ListBox1.AddItem Cells(i, 1).Value ' Spalte A
           ListBox1.List(ListBox1.ListCount - 1, 1) = Cells(i, 2).Value ' Spalte B
       Next i
    End Sub

Tipps für Profis

  • Verwende Public Variablen: Wenn du den aktuellen Index der Listbox speichern möchtest, um ihn später zu verwenden, definiere eine Public Variable.
  • Ereignisse nutzen: Nutze das ListBox_Click-Ereignis, um Daten in Textboxen zu laden, wenn ein Eintrag ausgewählt wird.
  • Datenvalidierung: Stelle sicher, dass die Eingaben in die Listbox validiert werden, bevor du sie hinzufügst.

FAQ: Häufige Fragen

1. Wie kann ich die Listbox dynamisch aktualisieren?
Du kannst den RowSource-Bereich dynamisch anpassen, indem du den Code zur Bestimmung der letzten Zeile verwendest.

2. Wie kann ich die Daten in der Listbox bearbeiten?
Du kannst die Daten in einer Textbox bearbeiten und anschließend die Änderungen zurück in die Listbox oder die zugrunde liegende Tabelle übertragen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige