Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1228to1232
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
Problem: Eintrag in einer Listbox anwählen
KLE
Hi,
...ich habe eine Listbox in einer Userform, diese enthält ca. 8.000 Artikel. Der User kann dann per Doppelklick auf einen Eintrag - diesen Datensatz in eine Auswahlbox (Listbox2) übernehmen, zur weiteren Verwendung.
Dabei wird er zeitgleich in der ersten Listbox (Artikelliste) per removeitem entfernt und steht dem User nicht mehr zur Verfügung.
Alles klappt super - aber:
Nach dem Doppelklick und dem "verschwinden" aus der Liste1, wird diese wieder mit Datensatz 1 beginnend angezeigt. Was lästig ist, wenn man schon weiter unten in der Liste war-denn nun muss man wieder erst scrollen um weiter in der Liste zu machen.
Ich dachte, wenn ich mir die aktuelle Position des ausgewählten Datensatzes in eine Variable merke und am Ende der Prozedur diese mit -1 (den Datensatz davor) wieder an die Listbox übergebe...sollte es funktionieren. Aber leider stimmt es nicht, es wird immer ein Artikel markiert, der um einige Zeilen davor liegt...

Mein Code:

Dim Klickzeile as long
Klickzeile = objLBBMKontakte.ListIndex ' Merken der Position (Zeile in der Box)
' Dann der Code der übergabe an die Listbox 2
' entfernen aus Listbox 1
' Listbox1 erneut anzeigen
' Dann Position wieder aufnehmen...
objLBBMKontakte.ListIndex = Klickzeile - 1
Warum, worin liegt mein Denkfehler ?
Gruß und Danke
Kay

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Problem: Eintrag in einer Listbox anwählen
11.09.2011 10:52:18
Peter
Hallo Kay,
wo hast Du die Variable Klickzeile definiert?
Du solltest sie in einem allgemeinen Modul als Public Klickzeile As Long definieren, dann sollte es eigentlich funktionieren.
Gruß Peter
AW: Das Problem muss woanders liegen
12.09.2011 15:22:58
KLE
Hi,
Hatte die Klickzeile as long im Bereich Option Explicit...der Userform. Aber das kann nicht das Problem sein. Habe den Weg probiert und mit F8 (EInzelschritt) alles mal nachvollzogen...Klickzeile wird korrekt übergeben.
Aber dann habe ich mit debug.print "Schritt 1"...usw. mir "Merker" gesetzt und habe so feststellen müssen, dass das Listbox_Click() Ereignis 2x durchlaufen wird. Beim ersten Mal = Alles OK, doch beim 2'ten Lauf, wird plötzlich ein neuer Listbox.listindex genutzt von Excel - KEINE Ahnung wo es herkommt, denn es variiert immer - bisher aber immer niedriger wie Klickzeile...und es scheint so, dass es nur auftritt, wenn Werte tiefer dem ungescrollten Listenbereich ausgewählt werden ?
Komisch nur, dass wenn ich mit F8 dem Doppelklick folge...läuft es nur einmal die Click-Prozedur durch. Lasse ich es Excel Selbst tun, wird es wieder 2x durchlaufen....und dabei wie gesagt - keine Ahnung warum.
Leider kann ich den Code, bzw. die Datei nicht hochladen (FIrmeninterne Daten und mehr wie 10.000Zeilen Code!)
Vielleicht kann mir jemand aber erklären, warum ich mit F8 nur einmal die Click-Prozedur durchlaufe und ohne EIngriff - 2x?!?
Gruß und Danke
Kay
Anzeige
Userform, Listbox Klick- und Doppelklick-Ereignis
13.09.2011 12:04:32
fcs
Hallo Kay,
es ist problematisch das Klick- und das DoubleKlick-Ereignis bei einer Listbox auszuwerten.
Es laufen bei einem DoubleKlick verschiedene Sachen ab.
A) Ein bereits selektierter Eintrag wird doppelt geklickt
1. Doubleklick-Ereignis
B) Ein noch nicht selektierter Eintrag wird doppelt geklickt.
1. Klick-Ereignis
2. Doubleklick-Ereignis
Außer beim Mausklick auf einen Listeneintrag wird das Klickereignis wird auch ausglöst:
- wenn der Listindex per Makro gesetzt wird,
- wenn per RemoveItem ein Eintrag gelöscht wird,
- wenn mit den Positioniertasten PfeilUp, PfeilDown, BildUp, BildDown, Pos1 oder Ende ein Eintrag gewählt wird.
Je nachdem was in den Klick- und Doubleklick-Ereignis-Prozeduren an Anweisungen steht, kann es dann zu unerwünschten Ergebnissen kommen. Die Klick-Ereignis-Prozedur sollte also keine Anweisungen enthalten, die den ListIndex verändern.
Damit die Klick-Ereignisprozedur nicht unerwünscht in die DoubleKlick-Prozedur eingreift muss über eine Varianble, der Ablauf entsprechend gesteuert werden. Events Ein-/Ausschalten nützt im Userform nichts.

'Auf Userform-Modulebene Variable deklarieren
Private boolDoubleClick  as Boolean
Private Sub ListBox1_Click()
If boolDoubleClick = True Then Exit Sub
'iCount = iCount + 1                                                          'TestZeile
'Debug.Print iCount & " | SingleClick " & Now & " | " & Me.ListBox1.ListIndex 'TestZeile
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
boolDoubleClick = True
' iCount = iCount + 1                                                          'TestZeile
'Debug.Print iCount & " | DoubleClick " & Now & " | " & Me.ListBox1.ListIndex 'TestZeile
Dim Spalte As Long
ZeileIndex = Me.ListBox1.ListIndex  'gewählten Eintrag Merken
With ListBox2
.AddItem Me.ListBox1.List(ZeileIndex, 0)
For Spalte = 1 To .ColumnCount - 1
.List(.ListCount - 1, Spalte) = Me.ListBox1.List(ZeileIndex, Spalte)
Next
End With
With Me.ListBox1
'Letzte Auswahl in Textbox schreiben
'Me.TextBox2 = .List(ZeileIndex, 0)                            'TestZeile
'gewählten Eintrag in Liste löschen
.RemoveItem ZeileIndex
End With
boolDoubleClick = False
End Sub
Dann ist es auch nicht erforderlich, dass nach dem löschen eines Eintrags der ListIndex erneut gesetzt wird.
Im Debug-Modus (Haltepunkte + mit F8 weiter ausführen) hängt das Ergebnis dann auch davon ab wie selektiert wird. Dann wird ggf. das Double-Klick-Ereignis zunächst garnicht erst ausgeführt, da schon nach dem 1. Klick das VBA-Fenster im Debug-Modus ausgeführt wird. Der 2. Klick endset dann meist im irgendwo im VBA-.Fenster. Das Double-Klick-Ereignis wird im Debug-Modus nur ausgeführt, wenn ein bereist per Einzel-Klick oder anders gewählter Eintrag doppelt geklickt wird.
Gruß
Franz
Anzeige

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige