Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1904to1908
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

Listbox Mehrfachauswahl

Listbox Mehrfachauswahl
10.11.2022 14:49:38
Erwin
Hallo Zusammen,
hier im Forum habe ich einen Beitrag mit Beispielmappe gefunden, die ich für meine Zwecke ändern möchte.
https://www.herber.de/forum/archiv/1464to1468/1464010_Excel_2016_Dropdown_mit_Mehrfachauswahl.html
Ich benötige diese Mehrfachauswahl nicht nur in A1 sondern von A1 bis A10; wo kann man des einstellen?
Wo kann ich den Namen "AWL_Namen" ändern bzw. wo finde ich die Eigenschaft "ListFillRange"
Was noch "nice to have" wäre, wenn der Code ein wenig kommnetiert würde, damit ich das später selbst nachvollziehen kann.
Beispieldatei: https://www.herber.de/bbs/user/156123.xlsm
Vielen Dank schon jetzt mal an die eifrigen Helfer*innen
Grüße - Erwin

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

Betreff
Datum
Anwender
Anzeige
AW: Listbox Mehrfachauswahl
10.11.2022 15:30:09
Charly
Hi Erwin
Meine VBA Kenntnisse sind ziemlich bescheiden, aber versuch mal so

Option Explicit
Private Const strSep = ", " 'Trennzeichen zwischen Namen, wenn Namen Leerzeichen enthalten, dann anderes Zeichen wählen
Private Sub ListBox1_Change()
Dim strText, intK!, intL!
With Me.ListBox1
Application.EnableEvents = False
For intL = 0 To .ListCount - 1
If .Selected(intL) = True Then
If strText = "" Then
strText = .List(intL, 0)
Else
strText = strText & strSep & .List(intL, 0)
End If
End If
Next
Me.Cells(Selection.Row, 1).Value = strText
Application.EnableEvents = True
End With
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim varSplit, intK!, intL!, strText As String
If Not Intersect(Target, Range("A1:A10")) Is Nothing Then
strText = Target.Text
With Me.ListBox1
Application.EnableEvents = False
For intL = 0 To .ListCount - 1
.Selected(intL) = False
Next
If strText  "" Then
varSplit = Split(strText, strSep)
For intK = LBound(varSplit) To UBound(varSplit)
For intL = 0 To .ListCount - 1
If .List(intL, 0) = varSplit(intK) Then
.Selected(intL) = True
Exit For
End If
Next
Next intK
End If
.Top = Target.Offset(1, 0).Top
.Visible = True
Application.EnableEvents = True
End With
Else
Me.ListBox1.Visible = False
End If
End Sub
Gruß Charly
Anzeige
AW: Listbox Mehrfachauswahl
10.11.2022 15:52:52
Erwin
Hallo Charly,
erstmal herzlichen Dank, das funktioniert ja super bis A10
Jetzt müsste ich nur noch die beiden anderen Punkte irgendiwe erklärt bekommen:
- Wo kann ich den Namen "AWL_Namen" ändern bzw. wo finde ich die Eigenschaft "ListFillRange"
- Was noch "nice to have" wäre, wenn der Code ein wenig kommnetiert würde, damit ich das später selbst nachvollziehen kann.
Vielleicht kann mir hier noch jemand helfen?
Grüße - Erwin
AW: Listbox Mehrfachauswahl
10.11.2022 16:20:09
Charly
Den Namen kannst du im Namens Manager ändern.
Formeln - Namens Manager
Wie schon geschrieben sind meine VBA Kenntnisse sehr bescheiden.
Ich hab ja nur 2 Zeilen im Code geändert

Me.Cells(1, 1).Value = strText
in

Me.Cells(Selection.Row, 1).Value = strText
und

If Target.Row = 1 And Target.Column = 1 And Target.Cells.Count = 1 Then
in

If Not Intersect(Target, Range("A1:A10")) Is Nothing Then
Für den Rest kann ich dir nicht helfen.
Ich stelle auf offen.
Gruß Charly
Anzeige
AW: Listbox Mehrfachauswahl
10.11.2022 20:15:53
ralf_b
listfillrange findest du wenn du im Menü Entwicklertools auf Entwurfsmodus klickst und dann mit der rechten Maustaste auf die Listbox klicken oder direkt daneben auf Eigenschaften.
AW: Listbox Mehrfachauswahl
10.11.2022 21:03:51
Erwin
Guten Abend,
jetzt habe ich ein wenig den Code verändert, sodass die Mehrfachauswahl einen größeren Bereich umfasst und in einer anderen Spalte aufgerufen werden kann; außerdem wird sie eine Zeile darunter angezeigt.
Meine geänderte Datei: https://www.herber.de/bbs/user/156128.xlsm
Was ich nciht geschafft habe ist, dass die Mehrfachauswahl nicht mehr permanent in Spalte A angezeigt wird, sondern variabel eine Spalte links von der Mehrfachauswahl (hier sollte sie in Spalte B angezeigt werden; Grund: wenn ich die Mehrfachauswahl in Spalte Z einsetzen möchte, soll die Auswahl nicht in A, sondern neben Z, also Y gezeigt werden.
Kann ich mit diesem Code auch mehrere unterschiedliche Mehrfachauswahlen handeln oder ist hier wieder der Code anzupassen?
Grüße - Erwin
Anzeige
AW: Listbox Mehrfachauswahl
10.11.2022 22:03:39
ralf_b
die markanten Stellen sind doch schön dokumentiert im Code.
und was offset() macht, hast du doch schon herausgefunden oder?
es gibt neben .top auch noch .left als Eigenschaft

.Top = Target.Offset(0, -1).Top 'eins tiefer
.Left = Target.Offset(0, -1).Left 'eins nach links
und ja, man muß den Code immer anpassen wenn man was Anderes haben will.
AW: Listbox Mehrfachauswahl
10.11.2022 22:22:36
Erwin
Guten Abend,
wie müsste es dann aussehen, wenn man mehrere Listboxen verwenden möchte, könnte man es irgendwie über den Namensmanager variabel lösen?
Grüße - Erwin
AW: Listbox Mehrfachauswahl
10.11.2022 23:42:36
ralf_b
du mußt jeden Zellbezug im Code variabel gestalten wenn du den Basiscode für mehrere Objekte und mehrere Bereiche benutzen willst.
Du mußt herausfinden wie du dem Code mitteilst welche Liste nun geladen werden soll. Und das weist nur du, weil nur du weist welche Liste in welcher Spalte aktiv sein soll.
Der Code befindet sich in Eventmakros d.h. er wird automatisch bei Auftreten des Events ausgelöst.
Und hier ist dann die notwendige Auswahl zu treffen.
Anzeige
Listbox Mehrfachauswahl - VBA erweitern
11.11.2022 07:14:44
Erwin
Guten Morgen,
vielen Dank schon mal für die bisherige Hilfe.
Ich habe jetzt versucht, eine(zwei) weitere Listbox(en) für die Mehrfachauswahl einzubinden, bin aber leider gescheidert.
Braucht man hier dann insgesamt 2 oder 3 x den Code oder kann man diesen so variabel gestalten, dass nur eine Programmierung ausreicht?
Hier die Datei mit meinen letzten Änderungen: https://www.herber.de/bbs/user/156132.xlsm
Grüße - Erwin
AW: Listbox Mehrfachauswahl - VBA erweitern
11.11.2022 09:55:09
Daniel
Hi
kann man variabel gestalten.

Option Explicit
Private Const strSep = ", " 'Trennzeichen zwischen Namen, wenn Namen Leerzeichen enthalten, dann anderes Zeichen wählen
Private Sub ListBox1_Change()
Dim strText, intK!, intL!
With Me.ListBox1
Application.EnableEvents = False
For intL = 0 To .ListCount - 1
If .Selected(intL) = True Then
If strText = "" Then
strText = .List(intL, 0)
Else
strText = strText & strSep & .List(intL, 0)
End If
End If
Next
ActiveCell = strText 'Spalte, in der die Mehrfachauswahl aufgerufen werden kann: C
Application.EnableEvents = True
End With
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim varSplit, intK!, intL!, strText As String
'    If Target.Row = 1 And Target.Column = 1 And Target.Cells.Count = 1 Then  'ALT, geht nur für Zelle A1
If Not Intersect(Target, Range("C1:C10,F1:F10,I1:I10")) Is Nothing Then 'von C1 bis C10 die Mehrfachauswahl benutzt werden
Select Case Target.Column
Case 3: ListBox1.ListFillRange = "System!D3:D10"
Case 6: ListBox1.ListFillRange = "System!F4:F8"
Case 9: ListBox1.ListFillRange = "System!H4:H8"
End Select
strText = Target.Text
With Me.ListBox1
Application.EnableEvents = False
For intL = 0 To .ListCount - 1
.Selected(intL) = False
Next
If strText  "" Then
varSplit = Split(strText, strSep)
For intK = LBound(varSplit) To UBound(varSplit)
For intL = 0 To .ListCount - 1
If CStr(.List(intL, 0)) = varSplit(intK) Then
.Selected(intL) = True
Exit For
End If
Next
Next intK
End If
.Top = Target.Offset(1, 0).Top ''die Listbox erscheint 1 Zeile unterhalb der selektierten Zelle
.Left = Target.Offset(0, -1).Left 'die Listbox erscheint 1 Spalte links von der selektierten Zelle
.Visible = True
Application.EnableEvents = True
End With
Else
Me.ListBox1.Visible = False
End If
End Sub
Gruß Daniel
Anzeige
Listbox Mehrfachauswahl - VBA erweitern
11.11.2022 10:39:17
Erwin
Hallo Daniel,
super dass man nicht für jede ListBox alles codieren muss.
Allerdings werden die Orte oder das Alter auch alles in Spalte C eingetragen.
Eigentlich sollte es so sein, wenn ich in Spalte C auswähle, dann die Auswahl in C eintragen, wenn ich in Spalte F auswähle, dann sollte der "Ort" auch in Spalte F eingetragen werden und nicht in C, gleiches gilt für die Auswahl in Splate I; dort sollte die Auswahl (Alter) nicht in C, sondern in I erscheinen.
Kann man hier noch nachsteuern?
Grüße - Erwin
AW: Listbox Mehrfachauswahl - VBA erweitern
11.11.2022 11:03:31
Daniel
hast du auch die eine kleine Änderung im Listbox_Change-Event übernommen?
alt: Me.Cells(Selection.Row, 3).Value = strText
neu: ActiveCell.Value = strText
oder auch: Me.Cells(Selection.Row, Selection.Column).Value = strText
Gruß Daniel
Anzeige
AW: Listbox Mehrfachauswahl - VBA erweitern
11.11.2022 11:19:40
Erwin
Hallo Daniel,
ich habe nicht den ganzen Cord rüberkopiert, sondern nur den offenscihtlichen Teil.
Ich glaub ich brauch ne Brille ;)
Sorry - und nochmals Danke - Erwin

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige