Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Listenfeld ersten Wert anzeigen (Schieberegler von Bildlaufleiste immer oben)

Begonnen von jagger, Januar 11, 2019, 00:09:33

⏪ vorheriges - nächstes ⏩

jagger

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

ebs17

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?
Mit freundlichem Glück Auf!

Eberhard

jagger

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

ebs17

Das wird eine Frage der genauen Umsetzung sein.

Eine denkbare andere Variante: Zeile in Kombinations-/Listenfeld auswählen
Dazu müsste man sich die Zeilennummer der ersten Selektierung merken.
Mit freundlichem Glück Auf!

Eberhard

jagger

@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

DF6GL

Hallo,

habe jetzt nicht alles durchgelesen, aber probier mal dies:

Me!lbxKollektionen= Me!lbxKollektionen.Column(0,0)
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

jagger

Hallo Franz,

das bringt leider auch nicht den gewünschten Effekt.  :(

Trotzdem Danke!

LG
jagger

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