Live-Forum - Die aktuellen Beiträge
Datum
Titel
17.04.2024 18:57:33
17.04.2024 16:56:58
Anzeige
Archiv - Navigation
1724to1728
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
ListBox mehrspaltig füllen
18.11.2019 20:06:31
Peer
Hallo.
Ich weiß, dieses Thema ist schon so oft durchgekaut worden, aber ich sitze gerade seit gefühlt 3 Stunden an ein und dem selben Problem und komme nicht weiter.
Daher kam ich auf die Idee, das Super-Forum hier zu fragen.
Ich möchte aus dem Blatt "Parameter" alle Daten auslesen und habe ein Userform erstellt.
Bei normalen TextBoxen und einem einspaltigen Liste konnte ich bis jetzt alles mit meinen bescheidenen VBA-Kenntnissen hinbekommen, aber bei einer dreispaltigen Liste komm ich einfach nicht weiter.
Bis jetzt habe ich zum Einlesen folgenden Code...

Private Sub UserForm_Activate()
Dim ListSZ1 As Range
Set ListSZ1 = Worksheets("Parameter").Range("Q3:S14")
With Worksheets("Parameter")
'Daten aus "Parameter" auslesen
Me.txt_Name.Text = .Range("A31").Text
Me.txt_Email.Text = .Range("A30").Text
Me.txt_Funktion = .Range("H30").Text
Me.txt_PersNr = .Range("H31").Text
Me.txt_Wohnort_PLZ = .Range("C18").Text
Me.txt_Wohnort_ORT = .Range("D18").Text
Me.txt_Wohnort_STRASSE = .Range("E18").Text
Me.txt_ETS_PLZ = .Range("C21").Text
Me.txt_ETS_ORT = .Range("D21").Text
Me.txt_ETS_STRASSE = .Range("E21").Text
Me.txt_FAE.Text = .Range("C4").Text
Me.txt_081.Text = .Range("J4").Text
Me.txt_091.Text = .Range("K4").Text
Me.txt_LehrTheorie = .Range("D4").Text
Me.txt_LehrPraxis = .Range("E4").Text
Me.txt_LehrFahren = .Range("F4").Text
Me.txt_LehrSonst = .Range("G4").Text
Me.txt_PTZ1 = .Range("H4").Text
Me.txt_PTZ2 = .Range("I4").Text
Me.txt_Quali2 = .Range("H6").Text
Me.txt_WD1 = .Range("L4").Text
Me.txt_WD2 = .Range("M4").Text
Me.txt_WD3 = .Range("N4").Text
Me.txt_WD4 = .Range("O4").Text
Me.txt_ZN1 = .Range("L6").Text
Me.txt_ZN2 = .Range("M6").Text
Me.txt_ZN3 = .Range("N6").Text
Me.txt_ZN4 = .Range("O6").Text
Me.lst_Verwendung.List = .Range("A2:A29").Value
With Me.lst_SZ1
'.List.RowSource = ListSZ1.Value
.ColumnCount = 3
.ColumnHeads = True
.AddItem = .Range("Q3:S14").Value
.List(.ListCount - 1, 1) = .Range("Q")
.List(.ListCount - 1, 2) = .Range("R")
End With
End With
End Sub
... und zum Zurückschreiben ...
Private Sub btn_OK_Click()
' schreibe Wert aus UF-Textbox in Zelle von Parameter-Tabelle (CCur() = Währungsformat  _
Zelle)
With Worksheets("Parameter")
.Unprotect
.Range("C4").Value = CCur(Me.txt_FAE)
.Range("D4").Value = CCur(Me.txt_LehrTheorie)
.Range("E4").Value = CCur(Me.txt_LehrPraxis)
.Range("F4").Value = CCur(Me.txt_LehrFahren)
.Range("G4").Value = CCur(Me.txt_LehrSonst)
.Range("H4").Value = CCur(Me.txt_PTZ1)
.Range("I4").Value = CCur(Me.txt_PTZ2)
.Range("J4").Value = CCur(Me.txt_081)
.Range("K4").Value = CCur(Me.txt_091)
.Range("L4").Value = CCur(Me.txt_WD1)
.Range("M4").Value = CCur(Me.txt_WD2)
.Range("N4").Value = CCur(Me.txt_WD3)
.Range("O4").Value = CCur(Me.txt_WD4)
.Range("H6").Value = CCur(Me.txt_Quali2)
.Range("L6").Value = CCur(Me.txt_ZN1)
.Range("M6").Value = CCur(Me.txt_ZN2)
.Range("N6").Value = CCur(Me.txt_ZN3)
.Range("O6").Value = CCur(Me.txt_ZN4)
.Range("A31").Value = Me.txt_Name
.Range("A30").Value = Me.txt_Email
.Range("H30").Value = Me.txt_Funktion
.Range("H31").Value = Me.txt_PersNr
.Range("C18").Value = Me.txt_Wohnort_PLZ
.Range("D18").Value = Me.txt_Wohnort_ORT
.Range("E18").Value = Me.txt_Wohnort_STRASSE
.Protect
End With
' schließe UF
Unload Me
End Sub

Wie ihr sehen könnt, habe ich schon einiges experimentiert. Aber es geht nicht weiter. Alles ohne Erfolg:
Kann mir jemand auf die Sprünge helfen, welche Gedankenfehler ich habe?
LG
Peer

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ListBox mehrspaltig füllen
18.11.2019 20:16:46
onur
Hier ein Beispiel:
ListBox1.AddItem
ListBox1.List(ListBox1.ListCount - 1, 0) = "hallo"
ListBox1.List(ListBox1.ListCount - 1, 1) = "Guten Tag"
ListBox1.List(ListBox1.ListCount - 1, 2) = "Morning"
ListBox1.List(ListBox1.ListCount - 1, 3) = "Tschau"

AW: ListBox mehrspaltig füllen
18.11.2019 20:24:00
Peer
Hallo onur.
Ich kenne das Beispiel schon, aber meine Einträge sind aus der Tabelle "Parameter".
LG
AW: ListBox mehrspaltig füllen
18.11.2019 20:27:15
onur
"aber meine Einträge sind aus der Tabelle "Parameter"" -Hääh ?
Was hat das mit dem Namen des Blattes zu tun?
AW: ListBox mehrspaltig füllen
18.11.2019 20:55:22
Peer
Weil ich nicht "Hallo", "Guten Tag" usw. in der Liste stehen haben möchte, sondern die Werte aus Tabelle "Parameter" Range Q3:S14.
Anzeige
AW: ListBox mehrspaltig füllen
18.11.2019 20:58:23
onur
Sorry, ich wusste ja nicht, dass du nicht in der Lage bist, ein Beispiel auf deine Bedürfnisse umzuschreiben.
AW: ListBox mehrspaltig füllen
18.11.2019 21:06:24
Peer
Habe ich ja versucht, aber ich bin nicht weitergekommen.
AW: ListBox mehrspaltig füllen
18.11.2019 20:54:44
Matthias
Moin!
In deinem Codeversuch scheitert es an der with- Zuweisung. Zudem musst kannst du mit additem nicht alles mit einmal übergeben. Bei additem solltest du eine Schleife nutzen. Würde dann so aussehen;
With Me.lst_SZ1
.ColumnCount = 3
.ColumnHeads = True
For zeile = 3 To 14
.AddItem Worksheets("Parameter").Cells(zeile, "Q")
.List(ListBox1.ListCount - 1, 1) = Worksheets("Parameter").Cells(zeile, "R")
.List(ListBox1.ListCount - 1, 2) = Worksheets("Parameter").Cells(zeile, "S")
Next
End With

Alternativ kannst du auch den ganzen Bereich übergeben. Dann musst du die List Eigenschaft nutzen. Würde dann so aussehen;
With Me.lst_SZ1
.ColumnCount = 3
.ColumnHeads = True
.List = Worksheets("Parameter").Range("q3:s14").Value
End With

VG
Anzeige
AW: ListBox mehrspaltig füllen
18.11.2019 21:11:47
Peer
Super, Matthias.
Ich glaube, ich habe durch das ganze Experimentieren inzwischen den Faden verloren gehabt.
Bin ja noch am Anfang.
Vielen Dank. Deine Lösung ist schon einmal ein Anfang.
LG
Peer
AW: ListBox mehrspaltig füllen
18.11.2019 20:42:23
Daniel
Hi
es gibt drei Wege, eine Listbox mit Inhalt zu füllen.
1. RowSource
wenn du einen kompletten Zellbereich ohne Änderung übernehmen willst, ist das einfachste die Adresse des Bereichst (mit Tabellenblatt) in die Eigenschaft RowSource zu schreiben:
Me.lst_SZ1.RowSource = "'Parameter!'"Q3:S14"

das reicht dann als Code, ggf braucht du gar keinen Code, wenn du das im VBA-Editor direkt in die Eigenschaftsliste einträgst.
dabei ist zu beachten:
- eine nachträgliche Änderung des Listboxinhaltes ist nicht möglich
- nur mit dieser Methode kannst du "ColumnHeads = True" verwenden. Befüllst du die Listbox anders, dann geht das nicht! Als Spaltenbeschriftung wird die Zeile über dem angegebenen Zellbereich verwendet
2. .List = 2-Dimensionales Array
man kann den Listboxinhalt auch über ein 2-Dimensionales Array einlesen (Wenn die Listbox nur eine Spalte haben soll, auch ein ein dimensionales Array
wenn das Array vorhanden ist bzw ein Zellbereich ohne Änderung eingelesen werden soll, reicht als Code

Set ListSZ1 = Worksheets("Parameter").Range("Q3:S14")
Me.lst_SZ1.List = ListSZ1.Value 

bei einer so befüllten Listbox kann man nachträglich im Code Werte verändern, Zeilen löschen und hinzufügen.
- .Columnheads muss FALSE sein.
- bei RowSource darf nichts eingetragen sein.
3. mit .AddItem
mit .AddItem kann man einzelne Werte zu einer Listbox hinzufügen.
hierbei musst du aber wirklich jeden Wert einzeln eintragen, um einen Zellbereich zu übernehmen, brauchst du eine Schleife.
Dabei wird mit .AddItem die Zeile angelegt und ggf die erste Spalte befüllt, dann müssen die Weitern Spaltenwerte in die Listbox geschrieben werden:
With Worksheets("Parameter")
for z = 3 to 14
Me.lst_SZ1.AddItem .Cells(z, "Q")
Me.lst_SZ1.List(Me.lst_SZ1.ListCount - 1, 1) = .Cells(z, "R")
Me.lst_SZ1.List(Me.lst_SZ1.ListCount - 1, 2) = .Cells(z, "S")
next
end with

auch hier gilt: .RowSource muss leer sein und .ColumnHeads auf False stehen.
bei dieser Methode gilt zusätzlich die Einschränkung, dass das nur bis maximal 10 Spalten funktioniert.
die Befüllmethoden 2 und 3 kann man kombinieren, dh wenn du bsw mit .List = Array eine initialbefüllung gemacht hast, kannst du diese mit .AddItem erweitern oder mit .RemoveItem vorhandene Zeilen löschen.
Verknüpfst du mit .RowSource die Listbox direkt mit einem Zellbereich, funktionert das natürlich nicht.
Gruß Daniel
Anzeige
AW: ListBox mehrspaltig füllen
18.11.2019 20:53:26
Peer
Hallo Daniel.
Vielen Dank für deine aufschlussreiche Erläuterung.
Dann wäre ein Array genau was ich brauche.
Die Liste soll später durch Doppelklick auf einen Eintrag geändert bzw erweitert werden.
Aber wie?
Gruß
Peer
AW: ListBox mehrspaltig füllen
18.11.2019 21:13:32
Peer
Interessant, snb
Danke.
AW: ListBox mehrspaltig füllen
18.11.2019 21:13:34
Peer
Interessant, snb
Danke.

29 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige