Hallo in die Runde,
beim Anzeigen eines Formulars lasse ich in einer Listbox
(mit einfacher Mehrfachauswahl) einen oder einige Wert(e) markieren.
Die Werte kommen aus einer Tabelle und sind die Werte der letzten Auswahl (vor dem Schließen des Formulars) in der Listbox.
Dim I As Long, RS As DAO.Recordset
With Me!lbxKollektionen
Set RS = CurrentDb.OpenRecordset("SELECT * FROM tab_intex_KM_Filter_code ", dbOpenSnapshot)
For I = 0 To .ListCount - 1
RS.FindFirst "code = " & Nz(.Column(0, I), -1)
.Selected(I) = Not RS.NoMatch
Next I
RS.Close
End With
Die Listbox zeigt 8 Zeilen an. Da es aber mehr als 8 Werte (Zeilen) gibt, hat die Listbox eine vertikale Bildlaufleiste.
Das Problem ist, dass die Listbox beim Öffnen des Formulars
immer zu letzten Wert springt, der Schieberegler ist also ganz "unten". Das geschieht unabhängig von den markierten Zeilen.
Wie kann ich erreichen, dass immer der ersten Wert oben
angezeigt wird, also der Schieberegler "oben" steht?
Mit Dank im Voraus
jagger
Eine übersichtliche Maßnahme wäre, das Ganze einfach rückwärts laufen zu lassen, also bspw. im Recordset eine umgedrehte Sortierung zu verwenden.
Daneben könnte man den Code noch etwas optimieren, z.B. bei passender Sortierung einfach statt jeweils Anfang Liste und FindFirst gleich FindNext anwenden und direkt springen.
Sowie : Warum "SELECT *", wenn nur das Feld code verwendet wird?
Hallo ebs17,
meinst Du mit rückwärts laufen zu lassen
"For I = .ListCount - 1 To 0" ?
Wenn ich das mache, wird nix markiert.
"FindFirst" habe ich gegen "FindNext" ausgetauscht.
"SELECT *" hab ich gegen "SELECT code" ausgetauscht, wobei die Tabelle sowieso nur die Spalte "code" hat.
Das Problem besteht allerdings weiterhin.
LG
jagger
Das wird eine Frage der genauen Umsetzung sein.
Eine denkbare andere Variante: Zeile in Kombinations-/Listenfeld auswählen (https://support.microsoft.com/de-de/help/509128)
Dazu müsste man sich die Zeilennummer der ersten Selektierung merken.
@alle,
so etwas wie "TopIndex" gibt es wohl für die StandardListbox bei Access nicht?
Ich habe leider noch immer keine Lösung gefunden.
LG
jagger
Hallo,
habe jetzt nicht alles durchgelesen, aber probier mal dies:
Me!lbxKollektionen= Me!lbxKollektionen.Column(0,0)
Hallo Franz,
das bringt leider auch nicht den gewünschten Effekt. :(
Trotzdem Danke!
LG
jagger
Guten Abend,
nach wochenlangem Suchen habe ich endlich die Lösung gefunden:
Dim I As Long, RS As DAO.Recordset
With Me!lbxKollektionen
Set RS = CurrentDb.OpenRecordset("SELECT * FROM tab_intex_KM_Filter_code ", dbOpenSnapshot)
For I = 0 To .ListCount - 1
RS.FindFirst "code = " & Nz(.Column(0, I), -1)
.Selected(I) = Not RS.NoMatch
Next I
RS.Close
End With
muss beim Ereignis "beim Laden" ausgefürt werden.
Dann ist auch die Sortierung richtig bzw.
der Schieberegler ist ganz "oben".
Hatte es vorher bei "beim Öffnen".
It is so easy!
LG
jagger