Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1460to1464
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
VBA ListBox Deselect
08.12.2015 11:09:20
IKE
Meine Listbox ist eine single select box, die beim einfachen Click auf ein Element Code ausführt (eine MessageBox anzeigt). Das ausgewählte Element wird in der ListBox blau hinterlegt und der Code wird ausgeführt. Das Element wird anschließend mit .Selected(.ListIndex) = False de-selektiert. Das funktioniert auch und der .ListIndex wird auf -1 gesetzt, da kein Element ausgewählt wurde.
Durch den .ListIndex-Change wird die Prozedur erneut aufgerufen und sollte ohne irendwelche Aktion zum Ende kommen, da .ListIndex ja -1 ist. Tatsächlich nimmt .ListIndex aber wieder den alten Wert (z.B. 2) an und die alte blaue Markiertung des Elements bleibt erhalten. Die Markierung sollte eigentlich leer sein und .ListIndex -1. Der Code in der Prozedur wird dadurch erneut ausgeführt.
Es scheint ein Fehler zu sein, der nur einmal auftritt, da die Prozedur nicht unendlich oft, sondern nur 2 Mal ausgeführt wird.
Hier ist die (verkürzte) Prozedur:
Private Sub lboStarSigns_Click()
With Me.lboStarSigns
If .ListIndex > -1 Then
'execute this code
... code ...
.Selected(.ListIndex) = False
End If
End With
End Sub
Hat jemand ein Idee, was der Fehler ist?

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA ListBox Deselect
08.12.2015 11:18:37
Daniel
Hi
wenn du nur mit der Maus arbeitest, könntest du das MouseUp-Event anstelle des Click-Events verwenden.
damit funktioniert es wie gewünscht, weil es etwas später einsetzt als das Click-Event (nach dem Klick) und es führt auch nicht zum Selbstaufruf bei Änderung des Listindexes.
du kannst auch den Listindex direkt auf -1 setzen, um den Eintrag wieder abzuwählen, du musst da nicht über das .Selected gehen:
.ListIndex = -1
Gruß Daniel

AW: VBA ListBox Deselect
08.12.2015 13:25:25
IKE
Hallo Daniel,
danke für Deine Hilfe. Das MouseUp-Event funktioniert. Offenbar ist es wirklich ein Timing Problem. MouseUp ruft die Procedure nicht nochmal auf und erlaubt auch die Deselection der Position in der Listbox mit .ListIndex = -1.
Gruß INGO

Anzeige
AW: VBA ListBox Deselect
08.12.2015 11:27:41
Rudi
Hallo,
du musst feststellen ob der Click durch Code ausgelöst wird.
Schema:
Option Explicit
Dim bolCode As Boolean
Private Sub ListBox1_Click()
If Not bolCode Then
With ListBox1
If .ListIndex > -1 Then
MsgBox .Value
bolCode = True
.ListIndex = -1
End If
End With
Else
bolCode = False
End If
End Sub
Gruß
Rudi

AW: VBA ListBox Deselect
08.12.2015 12:56:55
IKE
Hallo Rudi,
danke für die schnelle Antwort. Offenbar löst der Code den Click aus. Dennoch bleibt in der ListBox das gewählte Element blau markiert und der .ListIndex behält den alten Wert, obwohl .ListIndex = -1 gesetzt wurde. Dies scheint das Problem zu sein. Habe es auch mit der Brachial-Methode .Clear und erneut .AddItem versucht. Das Markierungsproblem bleibt aber dennoch erhalten. Gibt es sowas wie Repaint für ListBoxen?
Der Code lautet jetzt (verkürzt):
Option Explicit
Dim bCode As Boolean
Private Sub lboStarSigns_Click()
If Not bCode Then
With Me.lboStarSigns
If .ListIndex > -1 Then
MsgBox .Value
.ListIndex = -1
bCode = True
End If
End With
Else
bCode = False
End If
End Sub

Private Sub UserForm_Initialize()
bCode = False
End Sub

Anzeige

6 Forumthreads zu ähnlichen Themen

Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige