Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

ListBoxen-Schaltung

Forumthread: ListBoxen-Schaltung

ListBoxen-Schaltung
07.02.2026 15:37:45
Milan
Hallo Mitglieder des Forums,

ich habe Problem mit der Schaltung zwieschen zwei ListBoxen, dabei habe ich die Beispielmappe hochgeladen
in der ist auch Beschreibung des Problems. Ich bitte um Hilfestellung.

https://www.herber.de/bbs/user/180174.xlsm
Anzeige

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ListBoxen-Schaltung
07.02.2026 17:00:51
Alwin Weisangler
Hallo,

du musst in einer Schleife die Anzahl der selektierten Einträge zählen. Wenn 0 dann False.
so:


Private Sub ListBox2_Change()
Dim i&, j&
Select Case -IstSelected(ListBox1) - 2 * IstSelected(ListBox2)
Case 0
Label1.Caption = "Einen Empfänger wählen danch Artikel wählen und einfügen"
Case 1
Label1.Caption = "Artikel bis zu 15 Positionen wählen"
Case 2
Label1.Caption = "Einen Empfänger wählen"
Case 3
Label1.Caption = _
ListBox1.List(ListBox1.ListIndex, 5) _
& ", " & _
ListBox1.List(ListBox1.ListIndex, 7) _
& ", " & _
ListBox1.List(ListBox1.ListIndex, 9) _
& " - " & _
ListBox1.List(ListBox1.ListIndex, 3) _
& " " & _
ListBox1.List(ListBox1.ListIndex, 4) _
& " einfügen"

Label1.Enabled = True
End Select
With ListBox2
For i = 0 To .ListCount - 1
If .Selected(i) Then j = j + 1
Next i
If j = 0 Then Label1.Enabled = False
End With
End Sub

Problem 2 ?? Beschreibe was nicht klappt verständlich.

Gruß Uwe
Anzeige
AW: ListBoxen-Schaltung
07.02.2026 17:06:19
Alwin Weisangler
Ah, Problem 2 Entdeckt - Lösung so:


Private Sub ListBox2_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)

Dim i As Integer, n As Integer
Dim tmp As Integer, tmp2 As Integer
tmp = 0
For i = 1 To Me.ListBox2.ListCount - 1
If Me.ListBox2.Selected(i) = True Then
tmp = tmp + 1
End If
If tmp >= 15 Then ' "Maximum auf 15 Einträge begrenzen
MsgBox "Max 15 Einträge sind frei"
' Zurücksetzen auf maximum 15 Einträge
ListBox2.Selected(tmp) = False
For n = 0 To Me.ListBox2.ListCount - 1
If Me.ListBox2.Selected(n) = True And tmp2 >= 1 Then
tmp2 = tmp2 - 1
Else
Me.ListBox2.Selected(n) = False
End If
Next n
Exit Sub
End If
Next i

End Sub


Gruß Uwe
Anzeige
AW: ListBoxen-Schaltung
07.02.2026 18:39:16
Milan
Vielen Dank an Alwin Weisangler,

das ist perfekt gelöst, jetzt habe ich kein Abstürz mehr, aber zwei Sachen sind wieder geworden.

1. Wenn ich 16-te Eintrag wähle dann löscht mir alle Markierungen und nicht nur minus 1

2. Wenn ich z.B. aus versehen Position 1 auswähle und dann abwähle und vesuche neue 15 Einträge zu wählen
außer Position 1 dann kann ich nur 14 markieren

P.S. ich gehe davon aus, dass "ListBox2_Change()"gilt auch für ListBox1_Change()

Währe es möglich ohne viel Aufwand die zwei Punkte zu lösen?
Anzeige
AW: ListBoxen-Schaltung
08.02.2026 09:21:06
schauan
Hallöchen,

ich würde das Problem 1 so lösen:

oben am Modulanfang eine globale Variable:
Dim lb2Sel%


und am Ende von Listbox1_Change:
If ListBox2.Selected(ListBox2.ListIndex) Then lb2Sel = lb2Sel + 1 Else lb2Sel = lb2Sel - 1

If lb2Sel = 0 Then Label1.Enabled = False


In der globalen Variable hast Du immer unmittelbar und ohne Schleife die Anzahl der selektierten Einträge. Geht die durch deselektieren auf 0, wird das Label auf False gesetzt.

Anzeige
AW: ListBoxen-Schaltung
08.02.2026 09:21:39
Alwin Weisangler
Hallo Milan,

ich bin bis heute Nachmittag nicht am PC. Sollte sich bis dahin kein anderer Helfer gefunden haben baue ich das dann noch passend um.

Gruß Uwe
AW: ListBoxen-Schaltung
08.02.2026 17:31:44
Alwin Weisangler
Hallo Milan,

ich habe das Ding mal auf gesunde Füße gestellt. Es ist jetzt so angelegt, dass keine Prozeduren/Schleifen/Programmteile unnötig mehrfach durchlaufen werden, wenn einmal zum Erfassen reicht.
Teste mal.
https://www.herber.de/bbs/user/180177.xlsm
Das riesige Userform solltest du dir auch noch mal überlegen. Man kann statt Userform schließen einen Button fürs Drucken der Rechnung einbauen und danach den Kram zurücksetzten. Aber das war ja nicht deine Anfrage.

Gruß Uwe
Anzeige
AW: ListBoxen-Schaltung
08.02.2026 19:18:10
Milan
Vielen Dank
Jetzt löscht nicht alle markierte sondern nur das letzte, aber alte Probleme sind immer noch da.

1. Nicht sließbare MsgBox
2. Wenn ich von unten nach oben wähle dann kann ich nur 14 markieren
3 Wenn ich z.B. erste Eintrag markiere und danach abwähle und dann weiter ab den dritten Eintrag weiter markiere
dann kann ich auch nur 14 wählen

Ich glaube ListBox2_MouseMove macht irgendwie probleme

Gruß
Anzeige
AW: ListBoxen-Schaltung
08.02.2026 19:33:01
Alwin Weisangler
Hallo Milan,

die zuletzt von mir hochgeladene Datei läuft sauber. Die von dir genannten Probleme entstehen da nicht.
Ich weiß nicht was du verändert hast. Es wird auch dort die Schleife nur einmal durchlaufen, so dass die MsgBox nicht wieder neu geöffnet wird.
Ich habe halt den Code in großen Teilen neu geschrieben.

Gruß Uwe
Anzeige
AW: ListBoxen-Schaltung
08.02.2026 19:35:26
Alwin Weisangler
hier vorsorglich nochmals der komplette Code fürs Userform:


Option Explicit
Private j&, iLz&, bo As Boolean, tmp$

Private Sub Label1_Click()
Dim i&, Zeile&
Zeile = 28
With Tabelle1
.Range("E14").Value = ListBox1.List(ListBox1.ListIndex, 5) ' Firma-Name
.Range("E15").Value = ListBox1.List(ListBox1.ListIndex, 6) ' Firma-Zusatz
.Range("E16").Value = ListBox1.List(ListBox1.ListIndex, 2) ' Anrede
.Range("G16").Value = ListBox1.List(ListBox1.ListIndex, 3) & " " & ListBox1.List(ListBox1.ListIndex, 4) ' Vorname, Nachname
.Range("E17").Value = ListBox1.List(ListBox1.ListIndex, 7) ' Strasse, Hausnummer
.Range("E18").Value = ListBox1.List(ListBox1.ListIndex, 8) ' Adresse (zweite Zeile)
.Range("E19").Value = ListBox1.List(ListBox1.ListIndex, 9) ' Plz, Ort
.Range("AM19").Value = ListBox1.List(ListBox1.ListIndex, 1) ' Kundennummer
.Range("E29:AC43,AH29:AM43").ClearContents
For i = 1 To ListBox2.ListCount
If ListBox2.Selected(i - 1) Then
Zeile = Zeile + 1
.Range("G" & Zeile) = ListBox2.List(i - 1, 1)
.Range("AH" & Zeile) = ListBox2.List(i - 1, 6)
End If
Next i
End With
End Sub

Private Sub UserForm_Activate()
Label1.Enabled = False
Label1.Caption = "Einen Empfänger und bis zu 15 Artikelpositionen markieren danach hier betätigen"
End Sub

Private Sub Verarbeiten()
Dim i&, k&
If ListBox1.ListIndex = -1 And j = 0 Then
Label1.Enabled = False
ElseIf ListBox1.ListIndex = -1 And j > 0 Then
Label1 = "Einen Empfänger wählen"
Label1.Enabled = False
ElseIf ListBox1.ListIndex > -1 And j = 0 Then
Label1 = "Artikel bis zu 15 Positionen wählen"
Label1.Enabled = True
Else
Label1 = tmp
Label1.Enabled = True
End If
If j > 15 Then
MsgBox "Es sind nur 15 Positionen zulässig. Die letzte Position wird zurückgesetzt.", vbExclamation, "Maximale Anzahl Positionen sind überschritten"
bo = True
ListBox2.Selected(iLz) = False
End If
j = 0
End Sub

Private Sub ListBox1_Click()
Dim i&, arr(): arr = Array(5, 7, 9, 3, 4)
With ListBox1
For i = LBound(arr) To UBound(arr)
tmp = tmp & .List(.ListIndex, arr(i)) & ", "
Next i
tmp = Left(tmp, Len(tmp) - 2) & " einfügen"
End With
Verarbeiten
End Sub

Private Sub ListBox2_Change()
Dim i&
If bo = True Then
bo = False
Exit Sub
End If
With ListBox2
For i = 0 To .ListCount - 1
If .Selected(i) Then j = j + 1
Next i
End With
iLz = ListBox2.ListIndex
Verarbeiten
End Sub

Private Sub UserForm_Initialize()
Dim Z As Range
Dim Elt
Dim Rng As Range
Dim LetzteSpalte As Long
Dim BreitenListe As String

For Each Elt In Array(Array("Adressen", "ListBox1"), Array("Artikel", "ListBox2"))
With Worksheets(Elt(0))
BreitenListe = ""

Set Rng = .Range(.Range("A2"), .Range("XFD2").End(xlToLeft))
For Each Z In Rng.Cells
BreitenListe = BreitenListe & ";" & (Z.Width + 50)
Next
Set Rng = .Range(Rng, .Range("A9999").End(xlUp))
End With

With Me.Controls(Elt(1))
.ColumnHeads = True
.ColumnCount = Rng.Columns.Count
.RowSource = Elt(0) & "!" & Rng.Address
.ColumnWidths = Mid(BreitenListe, 2)
End With
Set Rng = Nothing
Next
End Sub


Gruß Uwe
Anzeige
AW: ListBoxen-Schaltung
08.02.2026 21:36:15
Milan
Vielen, vielen Dank ich bin schon glücklich geworden.


Das funktioniert jetzt fast perfekt kleinigkeit kriege ich nicht gebacken.

Funktionsweise bei Öffnung der UserForm

1. Label1 = Disabled - Caption "Einen Empfänger und bis zu 15 Artikelpositionen ..."

2. ListBox1_Click - Label1 = Disabled - Caption "Artikel bis zu 15 Positionen wählen"

3. ListBox2 abgewählt - Label1 = Disabled - Caption "Artikel bis zu 15 Positionen wählen"

4. ListBox1 & ListBox2_Click - Label1 = Enabled - Caption "arr = Array(5, 7, 9, 3, 4)"

Momentan mit Punkt 4 geht es nicht weiter obwohl Label1 scheinbar Enabled ist und wenn ich nur
Listbox1 clicke ist schon Label1 auf Enabled (scheinbar = weil grün)

Unter folegenden Link sende ich die Tabelle mit neuen Code
https://www.herber.de/bbs/user/180178.xlsm
Anzeige
AW: ListBoxen-Schaltung
08.02.2026 22:10:02
Alwin Weisangler
Hallo Milan,

das habe ich so wie in deiner ursprünglichen Datei entsprechend eingebaut.
Ich verstehe aber dein Problem. Ich habe eine MsgBox + Abbruch, wenn kein Artikel ausgewählt wurde um das Schreiben in die Rechnung wird verhindern.

Falls du das Label auf False haben möchtest und dann folglich der Text im Label ausgegraut bleibt gibt noch mal Bescheid.
https://www.herber.de/bbs/user/180179.xlsm

Gruß Uwe
Anzeige
AW: ListBoxen-Schaltung
09.02.2026 10:28:30
Alwin Weisangler
Hallo Milan,

ich habe jetzt beim Vergleichen entdeckt, was ich übersehen hatte. Dies nun entsprechend geändert.
https://www.herber.de/bbs/user/180180.xlsm

Gruß Uwe
AW: ListBoxen-Schaltung
09.02.2026 10:58:38
Alwin Weisangler
in Private Sub Label1_Click() braucht es die Abfrage j=0 nicht mehr.
Dann also so:


Private Sub Label1_Click()
Dim i&, Zeile&
Zeile = 28
With Tabelle1
.Range("E14").Value = ListBox1.List(ListBox1.ListIndex, 5) ' Firma-Name
.Range("E15").Value = ListBox1.List(ListBox1.ListIndex, 6) ' Firma-Zusatz
.Range("E16").Value = ListBox1.List(ListBox1.ListIndex, 2) ' Anrede
.Range("G16").Value = ListBox1.List(ListBox1.ListIndex, 3) & " " & ListBox1.List(ListBox1.ListIndex, 4) ' Vorname, Nachname
.Range("E17").Value = ListBox1.List(ListBox1.ListIndex, 7) ' Strasse, Hausnummer
.Range("E18").Value = ListBox1.List(ListBox1.ListIndex, 8) ' Adresse (zweite Zeile)
.Range("E19").Value = ListBox1.List(ListBox1.ListIndex, 9) ' Plz, Ort
.Range("AM19").Value = ListBox1.List(ListBox1.ListIndex, 1) ' Kundennummer
.Range("E29:AC43,AH29:AM43").ClearContents
For i = 1 To ListBox2.ListCount
If ListBox2.Selected(i - 1) Then
Zeile = Zeile + 1
.Range("G" & Zeile) = ListBox2.List(i - 1, 1)
.Range("AH" & Zeile) = ListBox2.List(i - 1, 6)
End If
Next i
End With
End Sub


Gruß Uwe
Anzeige
AW: ListBoxen-Schaltung-Gelöst
09.02.2026 17:06:36
Milan
Uwe vielen, vielen Dank.

Das funktioniert jetzt perfekt.
Ein problem mit einfügen wenn Label1 enabled war nicht wirklich problem, es fehlte am ende des Codes von Label1 - Unload.Me.
Ich dachte weil die Userform nicht geschloßen war, dass die nicht eingefügt hat, das habe ich gerade mitbekommen und dazu geschrieben

Gruß
Anzeige
AW: ListBoxen-Schaltung-Gelöst
09.02.2026 17:20:14
Alwin Weisangler
Gerne!

Gruß Uwe
Anzeige
Anzeige
Live-Forum - Die aktuellen Beiträge
Datum
Titel
14.05.2026 13:31:09
14.05.2026 09:50:42
13.05.2026 19:14:18