Hallo,
ich habe ein Hauptformular fm_rechnungen mit einem Unterformular uf_zeiten. Die Beiden Formulare sind nicht miteinander verknüft, uf_zeiten dient nur der Information.
Wenn ich das fm_rechnungen über einen Button öffne, möchte ich, das im Hauptformular und auch im Unterformular zum letzten Datensatz gesprungen wird.
Leider funktioniert dieser Code nicht:
DoCmd.OpenForm "fm_rechnungen"
DoCmd.GoToRecord , , acLast
Forms!fm_rechnungen!uf_zeiten.Form.SetFocus
DoCmd.GoToRecord , , acLast
Fehler: In Ihrem Ausdruck ist eine ungültige Methode angegeben.
Wie kann ich das lösen ?
Hallo,
das Formular frm_rechnungen sollte das "selbständig" erledigen, so daß man nur das Formular öffnen muß.
Dazu erstellst du im Form_Load Event eine entsprechende Prozedur, welche den aktuellen DS auf den letzten DS verschiebt. Wenn im UF mehrere DS angezeigt werden, kannst du eine öffentliche Prozedur im UF erstellen, die dann dort das Gleiche macht. Diese wird dann aus dem HF aufgerufen.
Ja Danke :-) Manchmal steht man auf dem Schlauch.
Ich habe in die Eigenschaft "Beim Anzeigen" des UF einfach ein DoCmd.GoToRecord , , acLast eingefügt.
Funktioniert.
Das ist keine gute Idee, denn dann kannst du keinen anderen DS mehr auswählen! "Zum letzen DS Wechseln" sollte als eigenständige Prozedur erstellt und dann aus dem HF explizit aufgerufen werden. Außerdem sollte man Makroaufrufe aus VBA heraus (DoCmd.xxx) so weit wie möglich vermeiden.
Beispiel im UF:
Public Sub SelectLastRecord()
With Me.RecordsetClone
If Not (.BOF And .EOF) Then
.MoveLast
Me.Bookmark = .Bookmark
End If
End With
End Sub
und dann aus dem HF heraus:
...
Me!subContainer.form.SelectLastRecord
...
Hinweis: subContainer ist hier der Name des SubForm-Steuerelements!
Man könnte auch direkt auf das Formular-Recordset zugreifen, aber i.d.R. verwende ich für eine Datensatz-Navigation das Formular.Recordsetclone Objekt.
Gruß
Knobbi38