Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1692to1696
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 Multiselect in Spalten auslesen
30.05.2019 19:48:55
Max
Hallo zusammen,
ich versuche seit zwei Tagen das folgende Problem zu lösen:
Ich habe eine Userform erstellt, die eine Listbox (multiselect) mit 11 Auswahlmöglichkeiten _ enthält. Jetzt möchte ich die angewählten Einträge in eine Excel-Liste ausgeben - aber nicht untereinander (ab A2, das bekomme ich mittlerweile hin), sondern nebeneinander in eigene Spalten (ab A2:K2). Wenn ein Eintrag der Listbox nicht ausgewählt wurde, soll auch die Zelle in der vorgesehenen Spalte leerbleiben. Zudem wäre es prima, wenn die Werte in der Excel-Liste bei erneutem Ausführen der Userform nicht überschrieben werden, sondern die neuen Werte unten in den jeweiligen Spalten eingefügt werden. Am Ende möchte ich so die Möglichkeit haben eine Pivot-Auswertung der ausgewählten und nicht ausgewählten Elemente aus der Listbox zu machen.

Private Sub UserForm_Initialize()
With meinFormular.Listbox1
.AddItem "a"
.AddItem "b"
.AddItem "c"
.AddItem "k"
Listbox1.ListStyle = fmListStyleOption
Listbox1.MultiSelect = fmMultiSelectMulti
End With
End Sub

Wie könnte der Code für Sub Button_Eingabe_Click() aussehen? Ich komme nicht weiter. Vielen Dank für eure Hilfe!
Viele Grüße Max

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Lade deine Datei mit dem UF hoch! o.T.
30.05.2019 20:00:38
Sepp
AW: Lade deine Datei mit dem UF hoch! o.T.
30.05.2019 22:12:00
Sepp
Hallo Max,
Dialog meinFormular
Option Explicit 
 
Private Sub Button_Eingabe_Click() 
  Dim lngItem As Long, lngLast As Long 
 
  With Sheets("Tabelle1") 
    lngLast = lastCell("A1:K1000") + 1 
    For lngItem = 0 To Listbox1.ListCount - 1 
      If Listbox1.Selected(lngItem) Then .Cells(lngLast, lngItem + 1) = Listbox1.List(lngItem, 0) 
    Next 
  End With 
End Sub 
 
Private Sub UserForm_Initialize() 
  With Listbox1 
    .AddItem "a" 
    .AddItem "b" 
    .AddItem "c" 
    .AddItem "d" 
    .AddItem "e" 
    .AddItem "f" 
    .AddItem "g" 
    .AddItem "h" 
    .AddItem "i" 
    .AddItem "j" 
    .AddItem "k" 
    .ListStyle = fmListStyleOption 
    .MultiSelect = fmMultiSelectMulti 
  End With 
End Sub 
 
Private Sub Button_Abbrechen_Click() 
  Unload Me 
End Sub 
 
Private Function lastCell(ByVal RangeAddress As String, Optional ByVal lastRow As Boolean = True) As Long 
  Dim varLast As Variant 
 
  If lastRow Then 
    varLast = Evaluate("MAX(IF(" & RangeAddress & "<>"""",ROW(" & RangeAddress & ")))") 
  Else 
    varLast = Evaluate("MAX(IF(" & RangeAddress & "<>"""",COLUMN(" & RangeAddress & ")))") 
  End If 
 
  If IsError(varLast) Then 
    lastCell = -1 
  Else 
    lastCell = varLast 
  End If 
End Function 

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0

TypNameEigenschaften
CommandButtonButton_Eingabe
Caption:Eingabe
Height:18
Left:216
TabIndex:1
Top:144
Width:84
CommandButtonButton_Abbrechen
Caption:Abbrechen
Height:18
Left:90
TabIndex:2
Top:144
Width:96
LabelLabel1
Caption:Label1
Height:6
Left:0
TabIndex:0
Top:0
Width :6
ListBoxListbox1
Height:102
Left:108
Top:12
Width:106,5

Anzeige
AW: Lade deine Datei mit dem UF hoch! o.T.
31.05.2019 20:30:18
Max
Hallo Sepp,
super, funktioniert genauso wie ich es mir erhofft habe. Tausend Dank! :)
Gruß Max
AW: Lade deine Datei mit dem UF hoch! o.T.
01.06.2019 10:36:25
Max
Hallo Sepp,
ich habe noch eine Frage: Jetzt würde ich gerne noch weitere Felder in der Userform einfügen, in denen ich z.B Datum und Name über Textboxen abfrage. Die Eingaben hätte ich gerne in den Spalten A, B und dann erst ab der Spalte C die ausgewählten und nicht ausgewählten Elemente aus der Listbox. Wie kann ich den Code so verändern, dass die Ergebnisse der Listbox (wie es mit deinem Code funktioniert) erst ab Spalte C (bis Spalte M) eingetragen werden? Also wie ich den Spaltenbereich der Listboxergebnisse definieren kann. Vielen Dank!
Gruß Max
Anzeige
AW: Lade deine Datei mit dem UF hoch! o.T.
01.06.2019 11:11:57
Sepp
Hallo Max,
lade doch eine aktualisierte Datei hoch, aus der man ersehen kann was, wann und wo angezeigt werden soll.
AW: Lade deine Datei mit dem UF hoch! o.T.
01.06.2019 12:50:34
Max
Hallo Sepp,
hier mein ganzes Projekt: https://www.herber.de/bbs/user/130140.xlsm
Namen:
ComboBox_combo1
TextBox_text1
ComboBox_combo2
TextBox_text2
Combobox_combo3
Textbox_text3
TextBox_text4
TextBox_text5
ComboBox_combo4
ListBox_list1
ListBox_list2
ComboBox_combo5
TextBox_text6
TextBox_text7
ListBox_list3
ComboBox_combo6
TextBox_text8
TextBox_text9
Was mir im Code noch fehlt, ist die Auswertung der drei Listboxen, so wie es mit deinem Code spaltenweise möglich ist. Mir ist aber nicht ganz klar, wie ich deinen Code auf die Spaltenbereiche (J:T;U:X;AB:AP) der angehängten Excel-Liste anpassen kann.
Vielen Dank vorab!
Gruß Max
Anzeige
AW: Lade deine Datei mit dem UF hoch! o.T.
01.06.2019 14:12:23
Sepp
Hallo Max,
Dialog UF
Option Explicit 
 
Private Sub Userform_Initialize() 
  With ComboBox_combo1 
    .AddItem "a" 
    .AddItem "b" 
    .AddItem "c" 
  End With 
  With ComboBox_combo2 
    .AddItem "d" 
    .AddItem "e" 
  End With 
  With Combobox_combo3 
    .AddItem "f" 
    .AddItem "g" 
  End With 
  With ComboBox_combo4 
    .AddItem "h" 
    .AddItem "i" 
  End With 
  With ComboBox_combo5 
    .AddItem "j" 
    .AddItem "k" 
    .AddItem "l" 
    .AddItem "m" 
    .AddItem "n" 
  End With 
  With ComboBox_combo6 
    .AddItem "0" 
    .AddItem "p" 
    .AddItem "q" 
  End With 
  ListBox_list1.ListStyle = fmListStyleOption 
  ListBox_list1.MultiSelect = fmMultiSelectMulti 
  With ListBox_list1 
    .AddItem "r" 
    .AddItem "s" 
    .AddItem "t" 
    .AddItem "u" 
    .AddItem "v" 
    .AddItem "w" 
    .AddItem "x" 
    .AddItem "y" 
    .AddItem "z" 
    .AddItem "aa" 
    .AddItem "bb" 
  End With 
  ListBox_list2.ListStyle = fmListStyleOption 
  ListBox_list2.MultiSelect = fmMultiSelectMulti 
  With ListBox_list2 
    .AddItem "cc" 
    .AddItem "dd" 
    .AddItem "ee" 
    .AddItem "ff" 
  End With 
  ListBox_list3.ListStyle = fmListStyleOption 
  ListBox_list3.MultiSelect = fmMultiSelectMulti 
  With ListBox_list3 
    .AddItem "gg" 
    .AddItem "hh" 
    .AddItem "ii" 
    .AddItem "jj" 
    .AddItem "kk" 
    .AddItem "ll" 
    .AddItem "mm" 
    .AddItem "nn" 
    .AddItem "oo" 
    .AddItem "pp" 
    .AddItem "qq" 
    .AddItem "rr" 
    .AddItem "ss" 
    .AddItem "tt" 
    .AddItem "uu" 
    .AddItem "vv" 
    .AddItem "ww" 
    .AddItem "xx" 
  End With 
End Sub 
 
Private Sub CommandButton_Abbrechen_Click() 
  Unload Me 
End Sub 
 
Private Sub CommandButton_Eingabe_Click() 
  Dim lngItem As Long, lngLast As Long 
  
  lngLast = Cells(Rows.Count, 1).End(xlUp).Row + 1 
  Cells(lngLast, 1).Value = ComboBox_combo1.Value 
  Cells(lngLast, 2).Value = TextBox_text1.Value 
  Cells(lngLast, 3).Value = ComboBox_combo2.Value 
  Cells(lngLast, 4).Value = TextBox_text2.Value 
  Cells(lngLast, 5).Value = Combobox_combo3.Value 
  Cells(lngLast, 6).Value = Textbox_text3.Value 
  Cells(lngLast, 7).Value = TextBox_text4.Value 
  Cells(lngLast, 8).Value = TextBox_text5.Value 
  Cells(lngLast, 9).Value = ComboBox_combo4.Value 
  Cells(lngLast, 25).Value = ComboBox_combo5.Value 
  Cells(lngLast, 26).Value = TextBox_text6.Value 
  Cells(lngLast, 27).Value = TextBox_text7.Value 
  Cells(lngLast, 43).Value = ComboBox_combo6.Value 
  Cells(lngLast, 44).Value = TextBox_text8.Value 
  Cells(lngLast, 45).Value = TextBox_text9.Value 
  With ListBox_list1 
    For lngItem = 0 To .ListCount - 1 
      If .Selected(lngItem) Then Range("J:T").Cells(lngLast, lngItem + 1) = .List(lngItem, 0) 
    Next 
  End With 
  With ListBox_list2 
    For lngItem = 0 To .ListCount - 1 
      If .Selected(lngItem) Then Range("U:X").Cells(lngLast, lngItem + 1) = .List(lngItem, 0) 
    Next 
  End With 
  With ListBox_list3 
    For lngItem = 0 To .ListCount - 1 
      If .Selected(lngItem) Then Range("AB:AP").Cells(lngLast, lngItem + 1) = .List(lngItem, 0) 
    Next 
  End With 
End Sub 

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0


Die Leerzeilen in deinem Code stören arg beim Lesen!
Wenn du dich auf die aktive Tabelle beziehst, brauchst du nicht eigens auf diese verweisen.
Bei den Steuerelementen brauchst du im Klassenmodul des UF diese nicht separat Voranstellen.
Anzeige
AW: Lade deine Datei mit dem UF hoch! o.T.
02.06.2019 10:42:33
Max
Hallo Sepp,
super, danke! Und Sorry für die Leerzeilen. Du hast mir echt weitergeholfen!
Gruß Max

303 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige