MultiSelect
#1
Hallo Experten!

In meiner UserForm habe ich 2 Listboxen die mit Dateien aus eiinem Laufwerk befühllt werden.
Nun möchte ich bevor die Listboxen befüllt werden ein zusätzliches element in die Listboxen zur auswahl von allen Dateien einfügen.


Code:
With Me.ListBox1
.AddItem "Alle"
End With

Den Code gibt es für jede ListBox 1 + 2
Damit möchte ich dann alles was in der ListBox2 steht auswählen.
Soweit geht das, das "Allle"  in den ListBoxen gleich zu anfang steht.
Das problem ist wenn "Alle" angewählt wird, nichts passiert.

Hab mir schon was Heruntergeladen um zu sehen was angewählt wurde.
Im Lokalfenster sehe ich auch nicht richtig ob das 0 oder 1 ist!
Der Code für die weitere ausführung nimmt immer die nächtse Zeile in der ListBox.
Setze ich in der UserForm eine CheckBox ein, wird dann alles angewählt bis auf die erste Zeile wo drin steht "Alle"

Noch ein ausschnitt vom Code mit der CheckBox

Code:
Private Sub CommandButton2_Click()
Dim lngC As Long
Dim lListBox  As Long
Dim i As Integer
If CheckBox1 = True Then
   MsgBox "Alle ausgewählt"
   For i = 0 To Start.ListBox2.ListCount - 1          'für jede Zeile der Listbox1
       Start.ListBox2.Selected(i) = True
   Next i
End If
 
  For lngC = 0 To ListBox2.ListCount - 1
     If Not ListBox2.Selected(lngC) Then
       MsgBox "Nichts ausgewählt"
           Else
       prcDateien2 "D:\Wartungspläne\" & cbDokument.Value & "\" & ListBox1.List(lngC) & "\"
     End If
  Next lngC
End Sub


Was mache ich Falsch oder geht das gar nicht was ich möchte?
Gibt es eine möglichkeit dies in der ListBox einzufügen?
Ich das Internet schon seit meheren Tagen befragt, habe aber keine lösung für dies gefunden.

Für jede Antwort oder Anregung danke ich euch


Angehängte Dateien
.xls   Wartung -1-3.xls (Größe: 114,5 KB / Downloads: 11)
mfg
Michael
:98:

WIN 10  Office 2019
Top
#2
Hallöchen,

hast Du auch den Haken gesetzt?
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#3
Hallo,

die Abfrage sollte ja eigentlich prüfen, ob die erste Zeile der Listbox markiert wurde:
Dim i As Integer
With ListBox2
 If .Selected(0) = True Then
   MsgBox "Alle ausgewählt"
   For i = 1 To .ListCount - 1
     .Selected(i) = True
   Next i
 End If
End With
Gruß Uwe
Top
#4
Hallöchen,

der Code muss normalerweise in das Click-Ereignis der Listbox oder von selbigem aufgerufen werden. Allerdings arbeitet das nur bei einfacher Auswahl und nicht bei den multiselects. Eventuell kannst Du das im Change-Ereignis verarbeiten.

Du musst Dir allerdings auch klar darüber sein, dass dann nach einer Auswahl von alle das Deselektieren einzelner erst dann geht, wenn Du "alle" zuvor deselektiert hast.
Ich habe bei mir in solchen Fällen, so wie in Deinem anderen Ansatz, über oder unter der Listbox und nicht irgendwo weit daneben Smile die Checkbox "alle auswählen" gesetzt und steuer das darüber. Ist einfacher und sicherer ...
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#5
Hallo!

Danke für die Hilfe!
Habe es mal getestet. Den Code habe ich in verschiedenen varianten eingebaut.
ListBox Click und Chang. Bei Click wurde er gar nicht angesprochen Huh und bei Chang leif der Code sich Tod.
Deshalb wird die Variante mit der CheckBox genommen.

Danke nochmals an euch beide
mfg
Michael
:98:

WIN 10  Office 2019
Top
#6
Hallo Michael,

direkt im Change-Ereignis dann z.B. so:
Private Sub ListBox3_Change()
 Static bolUeberspringen As Boolean
 Dim i As Integer
 With ListBox3
   If bolUeberspringen = False Then
     If .Selected(0) = True Then
       bolUeberspringen = True
       For i = 1 To .ListCount - 1
         .Selected(i) = True
       Next i
       bolUeberspringen = False
     End If
   End If
 End With
End Sub
Gruß Uwe
Top
#7
Hallo Uwe!

Erster Test  :28:

Werde noch weiter Testen!

Vielen Dank
mfg
Michael
:98:

WIN 10  Office 2019
Top
#8
Hallo Michael,

so läuft das noch etwas besser:
Private Sub ListBox3_Change()
 Static bolUeberspringen As Boolean
 Dim i As Integer
 With ListBox3
   If bolUeberspringen = False Then
     If .ListIndex = 0 Then
       bolUeberspringen = True
       For i = 1 To .ListCount - 1
         .Selected(i) = .Selected(0)
       Next i
       bolUeberspringen = False
     Else
       .Selected(0) = False
     End If
   End If
 End With
End Sub
Gruß Uwe
Top
#9
Hallo Uwe!

Danke für die Hilfe!

Der Code geht. Hab aber noch ein anderes problem.
Wollte mir eine Meldung geben lassen wenn in der ListBox2 nichts angewählt ist. Am anfang keine sache dachte ich und habe mich durch das www durch gesucht. Was gefunden und umgebaut auf meinen wunsch. Erster durchlauf alles i.O. :18:  doch nachden nächsten durchlauf nur noch :22: 
Es wird immer und überall beschrieben, wenn in einer ListBox nichts angewäht ist das der wert dann -1 ist. Bei mir ist der Wert wenn die ListBox2 befüllt ist immer 0, obwohl noch nichts angewählt wurde, was in der ListBox steht. Stehen mehere werte inder Listbox und ich wähle nicht die erste Zeile an ist der wert immer noch 0, er sollte aber 1 oder .... haben.

Ohne das du oder einanderer denn Code gesehen haben.

Woran kann sowas liegen?

Werde den Code etwas Später einstellen.
Vieleicht weiß einer oder du schon woran es liegen kann!
Code:
Private Sub CoBuDrucken_Click()
Dim lngC As Long
'Dim lListBox2  As Long
Dim i As Integer

If CheckBox2 = True Then
   MsgBox "Alle ausgewählt"
   For i = 0 To Start.ListBox2.ListCount - 1          'für jede Zeile der Listbox1
       Start.ListBox2.Selected(i) = True
   Next i
End If
 
 If ListBox2.Selected(lngC) = False Then
     MsgBox "Es wurden keine Ordner ausgewählt. Bitte korrigieren.", _
           vbExclamation
     Exit Sub
     
     ElseIf varTextQar = "" Then                                 ' Wenn Nichts angwählt
           MsgBox "Kein Quartal ausgewählt"
     ElseIf varTextjahr = "" Then
           MsgBox "Kein Jahr ausgewählt"
  Else
     Stop 'Wenn alles i.O. dann Code für Drucken
   For lngC = 0 To ListBox2.ListCount - 1
            If ListBox2.Selected(lngC) Then prcDateien2 "D:\Wartungspläne\" & cbDokument.Value & "\" & ListBox1.List(lngC) & "\"
   Next lngC
 
End If
End Sub
mfg
Michael
:98:

WIN 10  Office 2019
Top
#10
Hallo Michael,

geprüft wird mit
If CheckBox2.ListIndex > -1 Then
 tu was
Else
 MsgBox "Nichts ausgewählt!"
End If
Gruß Uwe
Top


Gehe zu:


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