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