Mai 25, 2022, 13:01:30

Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!


Sprung zum 4.-letzten Datensatz im Unterformular (Endlosformular)

Begonnen von tony.blue, März 27, 2022, 22:48:32

⏪ vorheriges - nächstes ⏩

tony.blue

Hallo,

ich habe in einem Formular ein Unterformular (Endlosformular). Mein Platz reicht nur aus, um 4 Zeilen des Unterformulars darzustellen. Super wäre, wenn hier die letzten 4 Datensätze des Unterformulars angezeigt werden.

Per VBA


Private Sub Form_Current()
DoCmd.GoToRecord , , acLast

kann ich zwar zum letzten Datensatz springen, dann wird allerdings nur dieser angezeigt.

Wie kann ich es denn schaffen, dass der 4.-letzte (und damit alle 4 letzten Datensätze) Datensatz angezeigt wird?

Vielen Dank!

Tony

Xoar

Hi,

probiere mal
DoCmd.GoToRecord, Record:=acLast, Offset:=-3
Ansonsten
DoCmd.GoToRecord , , acLast
DoCmd.GoToRecord , , acPrevious
DoCmd.GoToRecord , , acPrevious
DoCmd.GoToRecord , , acPrevious

Grüße

MzKlMu

Hallo,
verwende eine Abfrage für das Ufo mit
Select Top 4 ......Über ein geeignetes Feld muss die Abfrage entsprechend sortiert werden, dass die 4 letzten Datensätze angezeigt werden.
Du brauchst ein Kriterium (Datum z.B.) das die Reihenfolge der Datensätze definiert, einfach zu sagen "die 4 letzten" geht nicht.
Gruß
Klaus

Maxel

@klaus,

dann ist die Datensatzherkunft aber auf 4 Datensätze beschränkt und ein Scrollen nach oben - was evtl. gewünscht ist - nicht mehr möglich.

Ich würde die Variante von Xoar bevorzugen, ggf. verpackt in eine Schleife mit Bedingungsprüfung.
Viele Grüße
Maxel

MzKlMu

Hallo,
Zitataber auf 4 Datensätze beschränkt
scheint mir aber so gewollt. Muss der TE sich dazu äußern.
Gruß
Klaus

DF6GL

Hallo,

das Form_Current-Ereignis ist denkbar ungeeignet/falsch. Wenn schon

ZitatWie kann ich es denn schaffen, ...und damit alle 4 letzten Datensätze... angezeigt wird?

dann

Private Sub Form_Load()
  DoCmd.GoToRecord , , acLast
  DoCmd.GoToRecord , , acPrevious, 3
End Sub


oder mittels Schaltfläche, wenn wiederholt bei geladenem Formular die DS so angezeigt werden sollen:

Private Sub btnGotoLast4_Click()
  DoCmd.GoToRecord , , acFirst
  DoCmd.GoToRecord , , acLast
  DoCmd.GoToRecord , , acPrevious, 3
End Sub


tony.blue

Vielen Dank für die Rückmeldungen.

Das

Private Sub Form_Load()
  DoCmd.GoToRecord , , acLast
  DoCmd.GoToRecord , , acPrevious, 3
End Sub

bringt leider "Laufzeitfehler '2105': Sie können nicht zu dem angegebenen Datensatz springen."

Weshalb ist mir aber schleierhaft. Wenn ich die acPrevious-Zeile weglasse kommt kein Laufzeitfehler. Ich sehe allerdings auch nur die letzte (statt der letzten 4 Zeilen)

Wie könnte ich denn die 4 letzten Zeilen im UFO angezeigt bekommen? Die 4 letzten Datensätze im UFO sollten immer angezeigt werden, auch wenn ich im Hauptformular einen Datensatz weiterschalte.

Vielen Dank!


Tony

MzKlMu

März 29, 2022, 23:35:13 #7 Letzte Bearbeitung: März 29, 2022, 23:48:19 von MzKlMu
Hallo
siehe Antwort #2
Gruß
Klaus

tony.blue

Zitat von: Xoar am März 27, 2022, 23:03:16probiere mal
DoCmd.GoToRecord, Record:=acLast, Offset:=-3

Damit springt er beim Öffnen des Hauptformulars (und des eingebetteten UFO) im UFO zum letzten Datensatz. Wenn ich im Hauptformular weiterschalte springt er im UFO zum ersten Datensatz.

Zitat von: Xoar am März 27, 2022, 23:03:16 DoCmd.GoToRecord , , acLast
DoCmd.GoToRecord , , acPrevious
DoCmd.GoToRecord , , acPrevious
DoCmd.GoToRecord , , acPrevious

Bringt leider "Laufzeitfehler '2105': Sie können nicht zu dem angegebenen Datensatz springen."

MzKlMu

Hallo,
ZitatDie 4 letzten Datensätze im UFO sollten immer angezeigt werden,
Und noch mal der Hinweis auf Antwort #2.
Gruß
Klaus

tony.blue

Sorry - ich war im Beitrag 2 aber nicht in #2.

Das Problem an der vorgeschlagenen Lösung in #2 ist:

Zitat von: Maxel am März 28, 2022, 10:08:42@klaus,

dann ist die Datensatzherkunft aber auf 4 Datensätze beschränkt und ein Scrollen nach oben - was evtl. gewünscht ist - nicht mehr möglich.

Ein Scrollen nach oben sollte weiterhin möglich sein.

ebs17

With Me.Recordset
   .MoveLast
   .Move -3
End With
Vermutlich kann aber nicht sichergestellt werden, dass mindestens 4 oder überhaupt Datensätze vorhanden sind. Um Laufzeitfehler zu vermeiden, müsste man dann solche Sondersituationen zusätzlich berücksichtigen.
Mit freundlichem Glück Auf!

Eberhard

tony.blue

Zitat von: ebs17 am März 31, 2022, 08:04:20With Me.Recordset
   .MoveLast
   .Move -3
End With

Super - vielen Dank. Damit springt er beim Öffnen des Hauptformulars im UFO genau an den 4. letzten Datensatz.

Wenn ich im Hauptformular allerdings einen Datensatz weiterschalte springt er wieder auf den ersten Datensatz.

Derzeit habe ich den VBA-Code von ebs17 als Ereignis "Beim Laden". Wenn ich den Code als Ereignis "Beim Anzeigen" erfasse friert Access ein. Untern links steht "Dieses Recordset kann nicht aktualisiert werden".

Was ist denn das korrekte Ereignis, bei dem ich den VBA-Code eingebe, damit er bei jedem Weiterspringen im Hauptformular zum nächsten Datensatz den VBA-Code ausführt?

Vielen Dank!

Beaker s.a.

Hallo Tony,
Zitatdamit er bei jedem Weiterspringen im Hauptformular zum nächsten Datensatz den VBA-Code ausführt?
"Form_Current()" ist schon das richtige Ereignis, du musst den Code aber für das
UFo ausführen
With Me.UFoControlName.Form.Recordset
   .MoveLast
   .Move -3
End With

gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.

tony.blue

Vielen Dank. Derzeit erhalte ich noch einen Fehler beim Kompilieren.

Mein UFO heißt "ANKEU_Einzelumsätze Nebenkostenabrechnung Formular Abstimmung"

Deshalb habe ich eingetragen:

With Me.Form_ANKEU_Einzelumsätze Nebenkostenabrechnung Formular Abstimmung.Form.Recordset
   .MoveLast
   .Move -3
End With

Das ergibt aber auch einen Fehler beim kompilieren.

Was mache ich falsch?