Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Listenfeld mit Mehrfachauswahl
#1
Hallo liebe VBA - Profis,
anbei wieder einmal eine Frage an Euch: 
Habe eine Beispiel Datei erstellt. Möchte ein AciveX Listenfeld mit Mehrfachauswahl in meine Tabelle integrieren. Für jeden ausgewählten Wert im Datenbereich A7:A14 soll die entsprechende Zahl von 0 bis z. B. 7 in der Spalte B7 bis B14 ausgegeben werden. Folgenden Code habe ich bisher dazu gefunden: 

Private Sub ListBox1_LostFocus()
With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
s = s & "," & ListBox1.List(i)
End If
Next
Range("B7:B14") = Right(s, Len(s) - 1)
End With
End Sub


Dieser Code schreibt jedoch alle ausgewählten Werte in jede der Zellen B7 bis B14. Ich benötige jedoch nicht die Werte selbst, sondern die Zahlen lt. Reihenfolge. Am liebsten hätte ich vor den Werten noch eine Checkbox, in der man seine Auswahl trifft. - Danke für Eure Mühe im Voraus. Grüße und einen schönen Sonntag!   Blush
NobX
Antworten Top
#2
Hallo,
Private Sub ListBox1_LostFocus()
Dim i As Long
Dim s(0 To 7, 1 To 1) As String
With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
s(i, 1) = i
End If
Next
Range("B7:B14") = s
End With
End Sub
Für die Checkboxen stellst Du den ListStyle der ListBox auf 1.

Gruß Uwe
Antworten Top
#3
Hallo Uwe,

vielen Dank wieder einmal für Deine schnelle Hilfe. In der Testdatei funktioniert der Code so, wie ich es mir gewünscht habe. Ich habe dennoch eine Frage hinsichtlich der Anpassung an die tatsächliche Datei, in welcher dieser Code dann eingesetzt wird: 
Was wird in dieser Zeile umgesetzt? (Dim s(0 To 7, 1 To 1) As String) Muss ich die Zahl 7 verändern, wenn ich mehr Auswahlmöglichkeiten benötige als in der Testdatei?
Die Ausführung des Codes und die Veränderungen wie z. B. die Abwahl oder zusätzliche Auswahl einer Position im Listfeld werden nach einem Doppelklick in die Tabelle ausgeführt. Gibt es da noch eine andere Lösung, wie z. B. die Verknüpfung mit einer (Befehls-) Schaltfläche oder dass die Veränderungen einfach so erfolgen können, wie die Markierung erfolgt oder die Markierung in der Checkbox wieder entfernt wird?

Würde mich freuen, wenn Du mir dabei nochmals helfen würdest! Danke im Voraus.

Grüße

NobX
Antworten Top
#4
Hallo NobX,

so lässt sich die Feldvariable s an die Größe der Listbox anpassen:
Private Sub ListBox1_LostFocus()
Dim i As Long
Dim s() As String
ReDim s(0 To ListBox1.ListCount - 1, 1 To 1) As String
With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
s(i, 1) = i
End If
Next
Range("B7:B14") = s
End With
End Sub
Da lässt sich sicher etwas vereinfachen. Mein Problem ist, dass ich nicht weiß, welchen Sinn das am Ende ergeben soll. Blush

Gruß Uwe
Antworten Top
#5
Hallo Uwe,
habe Deinen Code getestet: funktioniert! Was kann ich noch tun, dass bei der Auswahl der Checkboxen die Referenzwerte sofort in den Zielbereich geschrieben werden?
Der Hintergrund ist folgender:
Über die echte Datei erstelle ich Angebote für Kunden. Auf dem Tabellenblatt, auf dem das Listfeld mit der Mehrfachauswahl stehen soll, werden die Rahmenbedingungen bzw. die verschiedenen Arten der Waren ausgewählt. Auf dem nächsten Tabellenblatt die Produkte und auf dem dritten erfolgt die Ausgabe. Die in der Auswahl generierten Zahlen von 0 bis x dienen mir als Bedingung für weitere Angaben auf dem Ausgabeblatt. - Vielleicht hilft Dir dieser Hintergrund weiter.
Anbei das aktualisierte Musterblatt mit Deinem neuen Code.
Grüße
NobX


Angehängte Dateien
.xlsm   Mappe101.xlsm (Größe: 23,51 KB / Downloads: 13)
Antworten Top
#6
Hallo Nobx,

das ist ja eine Wahnsinnsbeispieldatei; fast so gut wie meine eigene Testdatei. Undecided
Aber egal. Mein Vorschlag ist, die Werte direkt per Doppelklick in Spalte B ein/-auszutragen:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
With Range("B7:B14")
If Not Application.Intersect(Target, .Cells) Is Nothing Then
Target.Value = IIf(Target.Value = "", Target.Row - .Row, "")
End If
End With
End Sub
Gruß Uwe
Antworten Top
#7
Hallo Uwe,

danke Dir wieder einmal für Deine gute Arbeit. Der Code funktioniert natürlich, so wie Du es beschrieben hast. - Ich brauche ihn jedoch gerade so, dass ich nicht erst klicken muss um die (Index-) Werte in die Zellen eingetragen zu bekommen. Du hast mir in einer zweiten Anfrage einen Code empfohlen, mit dem dies genauso funktioniert. Daher glaube ich, dass ich nun erst einmal mit dem Thema fertig bin und es in die Praxis einbauen kann. Die Original Datei kann ich leider nicht zur Verfügung stellen, da sie so viele vertrauliche Daten enthält.
Viele Grüße
NobX
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste