Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
312to316
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
312to316
312to316
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

List_Change-Ereignis abfangen

List_Change-Ereignis abfangen
23.09.2003 17:34:32
Steffan
Hallo,

ich habe folgendes Problem, dass ich nicht gelöst kriege:
Ein UF hat u.a. als Inhalt eine Textbox und eine Listbox.
Beim Ändern der Listbox (anderer Eintrag wird ausgewählt) soll überprüft werden, was in der Textbox steht und wenn diese leer ist, soll eine Änderung des Listindex nicht zugelassen werden.
Das Problem ist, dass das beim Zurücksetzen des Listindex wieder ein Listboxereignis auslöst wird usw. usf. Nach drei Durchläufen ist damit Schluß, aber der Listindex wird nicht auf den ursprünglichen Wert zurückgesetzt!
Hat jemand einen Tip, wie ich das Problem lösen kann?

Danke im Vorraus
Steffan.

Mein Testcode:

Dim LI As Integer

Private Sub ListBox1_Change()
If Me.TextBox1.Text = "" Then
Me.ListBox1.ListIndex = LI
MsgBox "leer"
Else
LI = Me.ListBox1.ListIndex
End If
End Sub



Private Sub UserForm_Initialize()
Me.ListBox1.AddItem "eins"
Me.ListBox1.AddItem "zwei"
Me.ListBox1.AddItem "drei"
Me.ListBox1.ListIndex = 0
LI = 0
End Sub

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: List_Change-Ereignis abfangen
23.09.2003 17:57:18
ChrisL
Hi Steffan

Ist zwar nicht die Antwort auf deine Frage, aber wieso machst du es nicht so...

Option Explicit


Private Sub TextBox1_Change()
If TextBox1 = "" Then
ListBox1.Enabled = False
Else
ListBox1.Enabled = True
End If
End Sub



Private Sub UserForm_Initialize()
Application.EnableEvents = False
Me.ListBox1.AddItem "eins"
Me.ListBox1.AddItem "zwei"
Me.ListBox1.AddItem "drei"
Me.ListBox1.ListIndex = 0
ListBox1.Enabled = False
End Sub


Gruss
Chris
AW: List_Change-Ereignis abfangen
23.09.2003 19:00:26
Steffan
Hallo Chris,

danke für die schnelle Antwort.
Deine Lösung funktioniert zwar für das Beispiel, nur leider ist die Wirklichkeit komplizierter als mein Beispiel. In 'richtigen' UF soll der Klick möglich sein, eine Meldung ausgegeben werden und dann auf den alten Listindex zurückgeschaltet werden, das funktioniert mit Enabled=False nicht (Und der arme User fragt sich dann: Hä, warum kann ich hier nun wieder nicht klicken?)

Steffan.
Anzeige
AW: List_Change-Ereignis abfangen
23.09.2003 21:24:21
ChrisL
Hi Steffan

Da muss ich erstmal passen. Dachte eigentlich an eine Variabel, aber im Moment hab ich grad nicht den Durchblick. Ich schau da morgen gegen Mittag nochmals rein. Wenn jemand in der Zwischenzeit eine Idee hat kann sich gerne melden.

bis dann
Chris
AW: List_Change-Ereignis abfangen
24.09.2003 11:17:22
ChrisL
hi Steffan

Ich gebe auf. Die Unterdrückung des Change Ereignisses könnte man fürs Initilize Ereignis mit einer Variable erreichen. Hingegen den Teil im ListBox_Change Ereignis lässt sich m.E. nicht lösen.

Sorry, aber nach langem Nachdenken glaube ich, dass die Aufgabe tatsächlich 'Mission Impossible' ist.

Gruss
Chris
Anzeige
Na ja, trotzdem vielen Dank für Deine Mühe! oT
24.09.2003 14:37:22
Steffan
doch noch geschafft
26.09.2003 19:07:48
Steffan
Hallo Chris,
(und natürlich die anderen, die es interessiert auch)

falls Du noch mitliest und Dich das Problem interessiert:
Ich habs gelöst!
Ist zwar ziemlich umständlich, denn um den Listindex per Code zu ändern müssen folgende Voraussetzungen erfüllt sein:
- Listbox darf nicht den Fokus haben
- Listbox muß im Multiselect-Modus stehen

Darüberhinaus benötigt man noch zwei Variablen um den rekursiven Aufruf des ListChange-Ereignisses zu kontrollieren (mit nur einer ist es mir nicht gelungen)
(im Beispiel: bChange und bMsg)

Und hier mein Testcode:

Dim iOld As Integer
Dim bChange As Boolean
Dim bMsg As Boolean

Private Sub ListBox1_Change()
If bChange = False Then Exit Sub
If Me.TextBox1.Text = "" Then
bChange = False
With Me.ListBox1
.MultiSelect = fmMultiSelectExtended
Me.TextBox1.SetFocus
For i = 1 To .ListCount - 1
If i = iOld Then .Selected(i) = True Else .Selected(i) = False
Next
.ListIndex = iOld
.MultiSelect = fmMultiSelectSingle
If Not (bMsg = True) Then
MsgBox "Auswahl kann nur verändert werden, wenn in der Textbox etwas steht!"
bMsg = True
Else
bMsg = False
End If
End With
bChange = True
Exit Sub
Else
iOld = Me.ListBox1.ListIndex
End If
End Sub



Private Sub UserForm_Initialize()
bChange = False
With Me.ListBox1
For i = 1 To 5
.AddItem "Eintrag " & i
Next i
.ListIndex = 0
iOld = 0
End With
bChange = True
End Sub

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige