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
Hi,
probiere mal
DoCmd.GoToRecord, Record:=acLast, Offset:=-3
Ansonsten
DoCmd.GoToRecord , , acLast
DoCmd.GoToRecord , , acPrevious
DoCmd.GoToRecord , , acPrevious
DoCmd.GoToRecord , , acPrevious
Grüße
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.
@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.
Hallo,
Zitataber auf 4 Datensätze beschränkt
scheint mir aber so gewollt. Muss der TE sich dazu äußern.
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 Suboder 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
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
Hallo
siehe Antwort #2
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."
Hallo,
ZitatDie 4 letzten Datensätze im UFO sollten immer angezeigt werden,
Und noch mal der Hinweis auf Antwort #2.
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.
With Me.Recordset
.MoveLast
.Move -3
End WithVermutlich 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.
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!
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 Withgruss ekkehard
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?
Hallo,
Mein UFO heißt "ANKEU_Einzelumsätze Nebenkostenabrechnung Formular Abstimmung"
solch ein exzessive Namensgebung für ein Formular habe ich selten gesehen... :o
Der eigentliche Ursache für den Fehler liegt aber darin, dass die grundlegende Prämisse, Sonder- und Leerzeichen bei der Namensgebung dringend(!) zu vermeiden, nicht beachtet wird.
Benenne also das Form in einen vernünftigen Namen (ohne Leer- und Sonderzeichen) um oder umschließe den Namen mit Eckklammern ("[","]").
With Me![Form_ANKEU_Einzelumsätze Nebenkostenabrechnung Formular Abstimmung].Form.Recordset
Hallo Tony,
Vielleicht liest du auch mal dieses (https://www.donkarl.com?FAQ4.2) zur Problemlösung.
gruss ekkehard