ich hoffe, dass ich mir mit meiner ersten Frage hier nicht gleich einen Seitenhieb einfange. Das Thema wurde schon in vielen Foren diskutiert. Bei mir will aber einfach nichts funktionieren. Ich habe bereits mehrere Tage im Netz recherchiert und bin am verzweifeln. Mit VBA habe ich schon viel programmiert, jedoch habe ich bisher wenig Erfahrung mit UserForms.
Ich habe eine UserForm mit einigen ListBoxen erstellt. In einer ListBox1 (MultiSelectSingle) klicke ich auf einen Eintrag, der dann in eine weitere ListBox2 übernommen wird.
Das wird über einen Einfachklick => ListBox1_Click() ausgelöst.
Die ListBox1 wird danach geleert (ListBox1.Clear) und in einer Schleife mit ListBox1.AddItem ... wieder neu befüllt, damit der vorher angeklickte Eintrag aus der ListBox1 verschwindet und der User einen weiteren Eintrag auswählen kann. Läuft alles fast rund. Leider bleibt der ListIndex des vorherigen Eintrags weiterhin markiert, sodass der dann bereits markierte Eintrag nicht mehr angeklickt werden kann.
Ich habe vor und nach der erneuten Befüllung der ListBox1 folgendes probiert:
ListBox1.ListIndex = -1
Keine Änderung, die Stelle bleibt markiert.
For i = 1 To ListBox1.ListCount - 1
ListBox1.Selected(i) = False
Next
Keine Änderung, die Stelle bleibt markiert.
With ListBox1
If .ListIndex => 0 Then
.Selected(.ListIndex) = False
End If
Keine Änderung, die Stelle bleibt markiert. Ich weiß, die letzten Codes werden eigentlich bei MultiSelectMulti-ListBoxen angewendet. Ich wollte einfach nichts unversucht lassen.
Dann habe ich im Netz gefunden, dass vielleicht der Code zu schnell ausgeführt wird und "MouseUp" die Stelle einfach wieder markiert. Also habe ich im Code der UserForm folgendes hinzugefügt:
Private Sub ListBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Dim i as Integer
For i = 0 To ListBox1.ListCount - 1
ListBox1.Selected(i) = False
Next
ListBox1.ListIndex = - 1
End Sub
Einfach um alles auszuprobieren. Keine Wirkung. Das gleiche habe ich auch mit MouseMove probiert, keine Wirkung.
Nächster Versuch:
Private Sub ListBox1_AfterUpdate()
If ListBox1.ListIndex = -1 Then
Exit Sub
End If
ListBox1.ListIndex = -1
End Sub
Keine Wirkung.
Dann habe ich einen Button in die UserForm eingebaut mit folgendem Code:
Private Sub Button1_Click()
ListBox1.ListIndex = -1
End Sub
Keine Wirkung. Die MultiSelectMulti Codes habe ich auch in den Button eingebaut. Nichts.
Das Einzige, was zum Erfolg führte war, als ich in den Code des Buttons noch eine MsgBox eingebaut habe, die mir einfach nur am Anfang des Codes sagt, dass der Code ausgeführt wird. Erst danach wurde dann endlich der ListIndex auf -1 gesetzt, also die Markierung aufgehoben. Ich möchte natürlich nicht immer wieder eine MsgBox wegklicken, um mit der Prozedur fortzufahren.
Ich habe keine Ahnung warum das alles so läuft, wie es läuft. Leider habe ich auch keine Lösung gefunden, wie ich einen bereits markierten Eintrag nochmal ankllicken kann, was auch fein wäre.
Muss ich in den Eigenschaften der ListBox noch irgendwo etwas verstecktes einstellen? Ich habe nichts weiter gefunden.
Hat jemand eine Idee? Ich wäre sehr dankbar für jeden Tipp, den ich noch ausprobieren kann.
Viele Grüße,
Bernd