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! NobX
10.05.2020, 11:27 (Dieser Beitrag wurde zuletzt bearbeitet: 10.05.2020, 11:27 von Kuwer.)
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.
10.05.2020, 19:41 (Dieser Beitrag wurde zuletzt bearbeitet: 10.05.2020, 20:25 von WillWissen.
Bearbeitungsgrund: Schriftgröße
)
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.
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.
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
das ist ja eine Wahnsinnsbeispieldatei; fast so gut wie meine eigene Testdatei. 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
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