Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1752to1756
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
Inhaltsverzeichnis

Aufzählung in Listbox

Aufzählung in Listbox
21.04.2020 12:36:20
Peer
Hallo.
Ich denke seit langer Zeit darüber nach, wie man in Excel Aufzählungen in einer Listbox darstellen kann, konnte im Netz noch nichts darüber finden.
An folgenden Beispiel möchte ich es einmal erläutern:
Ich habe in jeder Zeile des Blattes einen Kurs, der eine KursNr, eine Kursbezeichnung und einen Lerninhalt hat. Und dieser Lerninhalt hat verschiedene Themen.
In Excel (anders als bei einer Datenbank) könnte man in die Zelle zu der KursNr und der Kursbezeichnung die Spalten Thema1, Thema2... anlegen. Aber wie bekomme ich Thema1, Thema2 und alle weiteren Themen (Spalten) in einer ListBox untereinander?
Und ich möchte gleich weitergehen, es können Themen hinzukommen, wegfallen oder nur geändert werden.
Also wie kann ich mit Excel so etwas umsetzen?
Hat jemand Ideen oder Lösungen gefunden und kann mir hierbei helfen? Oder muss ich den Gedanken aufgeben?
LG
Peer

28
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Aufzählung in Listbox
21.04.2020 15:15:37
Hajo_Zi
Hallo Peer,
Option Explicit
Private Sub UserForm_Activate()
ListBox1.ColumnCount = 7
ListBox1.RowSource = ActiveSheet.UsedRange.Address
End Sub


AW: Aufzählung in Listbox
21.04.2020 16:02:05
Peer
Hallo Hajo.
Vielen Dank für deine schnelle Hilfe.
Auslesen der Spalten mit .RowSource, begrenzt auf 7 Spalten.
Kann ich mit diesem Vorschlag auch die Themen, also die Spalten, erweitern und ändern?
LG
Peer
AW: Aufzählung in Listbox
21.04.2020 16:15:14
Hajo_Zi
ändere 7 auf 2546
Gruß Hajo
Anzeige
AW: Aufzählung in Listbox
21.04.2020 16:20:38
Daniel
Hi
Untereinander wird schwierig, weil in einer Listbox jede Listbox-Datenzeile immer auch genau eine Textzeile ist.
Das einfachste ist, du Schreibst die Themen am Ende der Tabelle in die Spalten nebeneinander und passt die Listbox dynamisch an sich ändernde Spaltenzahlen an, aber alle Daten zu einem Kurs stehen nebeneinander:
with Cells(1, 1).currentRegion
Listbox1.ColumnCount = .columns.count
Listbox1.RowSource = .address
Ende with

Willst du die Themen untereinander auflisten, musst du die Listbox aufwendig per Schleife erstellen und für jedes Thema eine eigene Listboxzeile erzeugen.
Die Basisdaten des Kurses zeigt du nur in der ersten Zeile an und lässt die restlichen Zeilen dann leer und füllst dort nur die Themen aus.
Allerdings würde ich auch die KursID in allen Zeilen wiederholen, damit man weiß welcher Kurs gemeint ist, wenn man nicht in die erste Zeile des Kurses klickt.
Gruß Daniel
Anzeige
AW: Aufzählung in Listbox
21.04.2020 16:32:35
Peer
Hallo Daniel.
Ich möchte die Themen in der Listbox untereinander anzeigen lassen. In der Tabelle "Kurse" können die Themen am Ende nebeneinander stehen und dann notfalls erweitert werden.
Die Basisdaten des Kurses habe ich schon in der UF als Dropdown eingelesen und nun möchte ich unterhalb eine Listbox mit den Themen untereinander gelistet und dort durch hinzufügen eines weiteren Themas oder durch ändern des selektierten Themas einfügen bzw bearbeiten.
Das klinkt kompliziert mit den Schleifen.
Wie muss die Schleife aussehen?
LG
Peer
AW: Aufzählung in Listbox
21.04.2020 18:34:45
Daniel
Hi
Achso,ich ging von einer komplettliste aus.
Wenn in der Listbox nur die Themen des gewählten Kurses angezeigt werden sollen, dann reicht eine Schleife über die Spalten mit den Themen in der gewählten Zeile in welcher du die Themen dann der Listbox hinzufügst.
Oder noch einfacher, du hast die Themen pro Kurs in. Einer Zelle stehen und übernimmst diesen Text in eine Textbox.
Gruß Daniel
Anzeige
AW: Aufzählung in Listbox
21.04.2020 20:33:48
Peer
Hallo Daniel.
Ich habe einen Post vorher schon mal meinen Versuch gelistet.
Vielleicht kannst du hier mal drüber schauen.
Gruß
Peer
AW: Aufzählung in Listbox
22.04.2020 13:39:58
Daniel
kann ich drüber schauen, aber Code und bearbeitete Datei bilden immer eine Einheit, die man gemeinsam betrachten muss.
Das Problem steckt selten in einem Teil alleine.
Gruß Daniel
AW: Aufzählung in Listbox
22.04.2020 15:11:40
Peer
Hallo Daniel.
Ich sende dir die Beispiel Datei.
Über den Button "frm_Teilnehmer" siehst du die UF "Erstellen MF 1". Auf der rechten Seite gibt es die ComboBox "Langbezeichnung". die von Sheet "Kurse" gefüllt wird. Durch Auswahl soll in ListBox "Themen" aus Sheet "Kurse" ab Spalte 8 alle Einträge der jeweilgen Zeile untereinander gegliedert werden, die weitere Einträge zulässt und vorhandene bearbeitbar macht.
Vielen Dank dafür, dass du dich dem annimmst.
https://www.herber.de/bbs/user/136963.xlsm
LG
Peer
Anzeige
AW: Aufzählung in Listbox
22.04.2020 16:46:08
Daniel
Hi
es gibt aber keine Listbox "Themen"
es gibt nur eine TextBox mit Namen txt_Aufgaben, wo oberhalb ein Label mit der Caption "Themen" steht.
bitte präziser beschreiben und zumindest die Steuerelemente vom Typ her korrekt benennen.
der Code zum Befüllen der TextBox steht doch im Change-Event der Combobox drin.
das ist der ausgegraute Teil.
man muss es halt nur richtig machen.
1. sollte man rechts und links richtig unterscheiden können
2. wenn der Text in eine TextBox geschrieben werden soll und untereinander stehen muss, muss die TextBox die Eigenschaft Multiline:=true haben
3. wenn man per Schleife einer TextBox hinhalte hinzufügen will, darf man die bestehenden Inhalte nicht überschreiben sondern muss die anhängen: TextBox.Text = TextBox.Text & NeuerText & vbLF
(vbLF ist der Zeilenumbruch)
4. muss man wissen, wann man einen relativen Spaltenversatz meint und wann man die absolute Spaltennummer hat.
das müsste noch korrigiert werden.
außerdem würde ich empfehlen, zumindest für die Testphase die Userform auf ShowModal = False zu setzen.
das macht es einfacher im Einzelstepmodus zu testen, weil man dann auch gleichzeigt in der Exceltabelle schauen kann.
Gruß Daniel
Anzeige
AW: Aufzählung in Listbox
22.04.2020 18:15:23
Peer
Hallo Daniel.
Oh, ich sehe, jetzt wo du darauf hinweist, dass es gar keine ListBox ist, sondern eine "große" TextBox.
Sorry für die Fehlinformation. Da habe ich etwas falsch eingefügt.
Ja, "Aufgaben" sind "Themen". Zu Beginn hatte ich es noch "Aufgaben" genannt, aber im Laufe der Konversation in diesem Thread, habe ich von "Themen", um es zu verdeutlichen, geschrieben und nicht alle Steuerelemente umbenannt.
Was ist hier besser? Ich denke mal, eine ListBox wäre sinnvoller?
Mit grauen Code meinst du den auskommentierten Code?
Wenn ja, habe ich ihn auskommentiert, weil er nicht funktioniert hat. Und wie mache ich ihn richtig? Da war ja die Frage anfangs.
LG
Peer
Anzeige
AW: Aufzählung in Listbox
22.04.2020 21:52:26
Daniel
Solange es nur für die Anzeige ist, ist es egal ob Text- oder Listbox.
Was du beim Programmieren beachten musst, gabe ich dir doch geschrieben.
Gruß Daniel
AW: Aufzählung in Listbox
27.04.2020 19:04:53
Peer
Hallo.
Also ich versuche die ganzen Tage dieses Problem zu lösen, komme aber zu keinen Ergebnis.
Ich kann mir deiner Erläuterung leider nichts anfangen, Daniel.
Vielleicht kann man es anschaulicher erklären.
Wie zb. lesen ich die Spalten aus, die zu der Zeile der ComboBox "cbx_LangBez" gehört?
LG
Peer
AW: Aufzählung in Listbox
27.04.2020 19:17:35
Daniel
Beispielsweise mit folgender Schleife, nachdem du die Zeilennummer ermittelt hast.
Ist nur beispielhafter Code und ich schau auch nicht seine Exakten Objektnamen nach, also bitte lesen verstehen und selber Programmieren:
z = ? 'Zeilennummer des Kurses
s = ? ' Spaltennummer der ersten Spalte mit den Texten
TextboxAnzeige.text= ""
Do until Cells(z, s).value = ""
TextboxAnzeige = TextboxAnzeige & Cells(z, s).value & VbLF
s = s + 1
Loop
Gruß Daniel
Anzeige
AW: Aufzählung in Listbox
27.04.2020 20:05:35
Peer
Hallo Daniel.
Ich pack es einfach nicht. Da kann ich noch soviel lesen und (nichts) verstehen.
Ich habe bis jetzt mit diesem Code

Private Sub cbx_LangBez_Change()
' txt_KurzBez eintragen abhängig von cbx_LangBez ----------------------------------------------- _
Dim SN, i As Integer
Dim c As Range, letzteSpalte As Long
Dim spalte%
SN = cbx_LangBez.Value
Set c = Sheets("Kurse").Columns(4).Find(SN)
If Not c Is Nothing Then
txt_KurzBez.Text = c.Offset(0, -1)
txt_KursNr.Text = c.Offset(0, -3)
letzteSpalte = c.Offset(0, 4).End(xlToLeft).Column
'lst_Themen.Value = c.Offset(0, letzteSpalte)
For spalte = 8 To letzteSpalte
lst_Themen.AddItem c.Cells(0, spalte)
Next spalte
End If
Set c = Nothing
' txt_KurzBez eintragen ENDE ------------------------------------------------------------------- _
End Sub
versucht.
Ich habe statt der Multiline-TextBox (die du TextboxAnzeige nennst) eine ListBox lst_Themen angelegt. Selbst mit der Multiline-TextBox "TextBoxAnzeige" funktioniert es nicht.
Die TextBoxen "txt_KurzBez" und "txt_KursNr" machen ja, was sie sollen.
Aber meine Schleife für lst_Themen bleibt leer.
LG
Peer
Anzeige
AW: Aufzählung in Listbox
27.04.2020 20:26:27
Daniel
Das Problem ist, dass du hier bei den Spaltennummern durcheinander kommst und dir nicht im klaren bist, ob du die Absoluten Nummern des Tabellnlatts, die Versatzwerte ausgehend von einer Ausgangszelle (c.offset) oder die Indexwerte ausgehend von einer Ausgangszelle verwendet.
Das wirfst du komplett durcheinander.
Wie hast du den bisherigen Code erstellt, wenn du jetzt an einer so einfachen Sache scheitert?
Gruß Daniel
AW: Aufzählung in Listbox
27.04.2020 20:41:16
Peer
Hallo Daniel.
Wie du an meinem Status erkennst, bin ich noch VBA-Anfänger, daher habe ich im Web ein wenig recherchiert und meine aktuellen Kenntnisse hinzugefügt. Dabei war mein Anliegen, per VBA in der UF abhängig des Wertes der ComboBox "cbx_LangBez", die aus dem Sheet "Kurse" ausgelesen wird, die beiden TextBoxen mit dem zugehörigen Wert zu füllen, was auch funktioniert.
Und jetzt wollte ich eben diese ListBox, dessen Einträge ich später in ein Worddokument übertragen möchte, mit den Themen, die ab den Spalten 8 vom Sheet "Kurse" stehen, untereinander anzeigen lassen. Weshalb auch die Frage an dich war, was besser ist, eine ListBox oder eine MultiTextBox, damit die Daten dann vernünftig in das Steuerelement im WordDokument übertragen werden. Natürlich auch wieder untereinander.
VG
peer
Anzeige
AW: Aufzählung in Listbox
27.04.2020 20:59:37
Daniel
OK, ganz anderes Thema.
Mit der Übertragung von Daten in ein WordDokument kennen ich mich überhaupt nicht aus, da muss ich passen.
Würde da mal eher die Textbox vermuten, kommt aber immer auch darauf an, was du im Worddokument hast.
Gruß Daniel
AW: Aufzählung in Listbox
27.04.2020 21:05:16
Peer
Ich arbeite schon mit den Übertragen der Daten nach Word.
Mein Problem ist momentan, die ListBox mit den Spalten ab 8 aus "Kurse" untereinander zu füllen, abhängig vom Wert der ComboBox "cbx_LangBez".
LG
Peer
AW: Aufzählung in Listbox
27.04.2020 21:25:37
Daniel
Ok, letzter Codeversuch für dich.
letzteSpalte = c.Offset(0, 4).End(xlToRight).Column
'lst_Themen.Value = c.Offset(0, letzteSpalte)
For spalte = 8 To letzteSpalte
lst_Themen.AddItem Sheets("Kurse").Cells(c.row, spalte).value
Next spalte
Gruß Daniel
AW: Aufzählung in Listbox
28.04.2020 09:31:47
Peer
Hallo Daniel.
Vielen Dank.
Jetzt sehe ich erst, was du mit links oder rechts gemeint hast. Das ist mir gar nicht aufgefallen.
Aber weiterhin werden die Einträge nicht in "lst_Themen" dem Wert der ComboBox "cbx_LangBez" zugeordnet. Egal welchen Wert die ComboBox hat, es bleiben die Einträge stehen, die in der ersten Zeile von Sheets("Kurse") sind. Und das, obwohl mit c der Wert der ComboBox bestimmt wird.
Verstehe ich nicht.
LG
Peer
AW: Aufzählung in Listbox
28.04.2020 09:45:09
Daniel
Hast du bedacht, dass du bei Auswahl eines neuen Kurses die Listbox leeren musst?
AW: Aufzählung in Listbox
28.04.2020 09:45:10
Daniel
Hast du bedacht, dass du bei Auswahl eines neuen Kurses die Listbox leeren musst?
AW: Aufzählung in Listbox
28.04.2020 09:56:05
Peer
Hallo Daniel.
Ich nahm an, das

Set c = Nothing
dies tut?
LG
Peer
AW: Aufzählung in Listbox
28.04.2020 10:16:40
Daniel
C ist doch die Zelle, welche den in der Combonox ausgewählten Kurs markiert.

AW: Aufzählung in Listbox
28.04.2020 10:24:09
Peer
oh, hat sich überschnitten.
AW: Aufzählung in Listbox
28.04.2020 10:22:49
Peer
Hallo Daniel.
Ich nahm an, das

Set c = Nothing
dies tut?
Ich habe es nach deinem guten Hinweis lösen können.

Private Sub cbx_LangBez_Change()
' Werte eintragen abhängig von cbx_LangBez -------------------------------------------------
Dim SN, i As Integer
Dim c As Range, letzteSpalte As Long
Dim spalte%
'Variable des ComboBox-Eintrages festlegen
SN = cbx_LangBez.Value
'Variable des gefunden Eintrages aus "Kurse" beginnend Spalte 4 und Variable SN zuordnen
Set c = Sheets("Kurse").Columns(4).Find(SN)
'ListBox "Themen" vor Auswahl löschen
lst_Themen.Clear
'wenn Eintrag in cbx_LangBez, dann...
If Not c Is Nothing Then
txt_KurzBez.Text = c.Offset(0, -1)   '...KurzBez Wert von cbx_LangBez 1 Spalte links  _
davon
txt_KursNr.Text = c.Offset(0, -3)    '...KursNr Wert von cbx_LangBez 3 Spalten links  _
davon
letzteSpalte = c.Offset(0, 4).End(xlToRight).Column 'bis letzte Spalte ab Spalte 8 (von  _
cbx_LangBez 4 Spalten rechts)
'Schleife zum Durchlaufen aller Spalten ab Spalte 8
For spalte = 8 To letzteSpalte
'füge in lst_Themen Eintrag Spalte 8 hinzu aus "Kurse", die in der Zeile von c ( _
gefundener Eintrag von SN) stehen
lst_Themen.AddItem Sheets("Kurse").Cells(c.Row, spalte).Value
'nächste Spalte bis letzteSpalte
Next spalte
End If
Set c = Nothing
' Werte eintragen ENDE ---------------------------------------------------------------------
End Sub

Ich hoffe, das ich anhand meiner Kommentare alles richtig verstanden habe.
Ansonsten wäre eine Korrektur hilfreich.
Vielen Dank nochmal, für deine Geduld.
LG
Peer
AW: Aufzählung in Listbox
21.04.2020 17:46:54
Peer
Hallo
Ich habe mit Web Mitteln folgendes versucht, was aber nicht den Erfolg bringt.
Private Sub cbx_LangBez_Change()
' txt_KurzBez eintragen abhängig von cbx_LangBez ----------------------------------------------- _
Dim SN, i As Integer
Dim c As Range, letzteSpalte As Long
letzteSpalte = Sheets("Kurse").Cells(2, Columns.Count).End(xlToLeft).Column
SN = cbx_LangBez.Value
Set c = Sheets("Kurse").Columns(4).Find(SN)
If Not c Is Nothing Then
txt_KurzBez.Text = c.Offset(0, -1)
txt_KursNr.Text = c.Offset(0, -3)
'txt_Aufgaben.Text = c.Offset(0, 4) 'zeigt nur die Spalte 8 an
'txt_Aufgaben.Text = c.Offset(0, letzteSpalte) 'passiert nichts
For i = 8 To letzteSpalte
txt_Aufgaben.Text = c.Offset(0, i)   ' passiert auch nichts
Next i
End If
Set c = Nothing
' txt_KurzBez eintragen ENDE ------------------------------------------------------------------- _
End Sub
LG
Peer

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige