Neuigkeiten:

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

Mobiles Hauptmenü

Nach dem "AfterUpdate()" Ereigniss zum (vormals) letzten Datensatz springen

Begonnen von KonradR, Mai 17, 2024, 18:16:08

⏪ vorheriges - nächstes ⏩

KonradR

Hallo liebe Accessfreunde,

ich habe ein Unterformular mit einem Kombinationsfeld erstellt. Wenn ich die Liste des Kombinationsfeldes ausklappe und eine Auswahl treffe, wird das "AfterUpdate" Ereignis wirksam und ein weiteres Unterformular wird aktualsiert. Gleichzeitig springt dann der Datensatzzeiger in den ersten Datensatzes in dem ich gerade das Kombinationsfeld bedient habe. Jetzt möchte ich ereichen, dass der Datensatzzeiger nach der Aktualisierung nicht in den ersten, sonder in den nächsten Datensatz dieses Formulars springt. Daher habe ich mir folgendes Skript ausgedacht:
Private Sub ZutatSammelEinheIDRef_AfterUpdate()
'aktuellen Datensatz im Unterformular ermitteln
'Variable für Recordset deklarieren
    Dim rcs As DAO.Recordset
   
'Variable für Unterformular deklarieren
    Dim fsub As SubForm
   
'Variable für aktuelle Position des Datensatzzeigers deklarieren
    Dim rcsPos As Integer
   
'Der Variable für das Unterformular einen Wert bzw. ein Unterformular zuweisen.
    Set fsub = Forms![frm00BWT_Haupt]![frm03BWTMahlzeitRezepteZutatenErfassen_Unter].Form!

'Variable für das Recordset (mit dem angezeigtem Inhalt des UFOS) befüllen
    Set rcs = fsub.Form.RecordsetClone
   
    rcsPos = rcs.AbsolutePosition
   
    Forms![frm00BWT_Haupt]![sfrm01BWTMahlzeitRezepteNwTagSumme_Unter].Form!.Requery
    rcs = rcsPos
    rcs.MoveNext
rcs.Close
End Sub

Jedoch habe ich dann zwei Herausforderungen:
  • Laufzeitfehler 2465: Microsoft Access kann das in ihrem Ausdruck angesprochene Feld 'frm03BWTMahlzeitRezepteZutatenErfassen_Unter' nicht finden
  • Fehler beim Kompilieren: Unzulässige Verwendung einer Eigenschaft

Beim ersten Punkt verstehe ich nicht, wiso das Unterformular nicht gefunden wird. Ich habe es doch aus dem Feld "Herkunftsobjekt" Eigenschaftenblatt des betreffenden Unterformulars kopiert.
Mit der zweiten Meldung kann ich leider gar nichts anfangen. Habt ihr da eine Idee?
  •  

KonradR

Ich habe jetzt den Code etwas angepasst. Allerdings müsste ich, wenn ich nach der Nummerierung im RecordsetClone filtere, diese auch direkt ansprechen. Leider habe ich nichts dazu im Netz gefunden. Habt Ihr dazu eine Idee? Hier mein Code, mit dem noch nicht funktionierenden Filter nach der Nummerierung im Recordsetclone:
Private Sub cboZutatSammelEinheIDRef_AfterUpdate()
'aktuellen Datensatz im Unterformular ermitteln
'Variable für den Recordset deklarieren
    Dim rcs As DAO.Recordset

'Variable des aktuellen Datensatzes deklarieren
    Dim rcsPosAkt As Long

'Variable für gewünschte Position des Datensatzzeigers deklarieren
    Dim rcsPosGew As Long

'Variable für den Recordset (mit dem angezeigtem Inhalt des UFOS) befüllen
    Set rcs = Me.RecordsetClone

'Variable für die akuelle Position im Recordset befüllen
    rcsPosAkt = Me.CurrentRecord

'Variable für die gewünschte Position im Recordset befüllen
    rcsPosGew = rcsPosAkt + 1

'    MsgBox "aktuell: " & rcsPosAkt & vbCrLf & "gewünscht: " & rcsPosGew '& ", SammelID: " & rcs.Filter = "ZutatSammlID =" & rcsPosAkt
'Recordset zu gewünschten Datensatz filtern
    rcs.Filter = rcsPosGew

    rcs.Close
    Forms![frm00BWT_Haupt]![sfrm01BWTMahlzeitRezepteNwTagSumme_Unter].Form!.Requery

'Datensatzzeiger auf den Datensatz setzen, der auf den der Recordsetclone gefiltert wurde.
    Me.Form.Bookmark = rcs.Bookmark
End Sub
  •  

Beaker s.a.

--
Frauen aller Länder vereinigt euch! Wir brauchen eine Wiedergeburt des Matriarchats.
Und schickt den Papst in die Wüste! Da kann er 40 Tage auf God(o)t warten.
  •  

PhilS

Zitat von: KonradR am Mai 18, 2024, 11:20:41Allerdings müsste ich, wenn ich nach der Nummerierung im RecordsetClone filtere, diese auch direkt ansprechen. Leider habe ich nichts dazu im Netz gefunden.
Filtern kann man nach Daten in den Datensätzen des jeweiligen Recordset. Die aktuelle Position des Datensatzzeigers innerhalb des Recordset gehört aber nicht zu diesen Daten, sondern ist eine Eigenschaft des Recordsets.

Ich verstehe bisher nicht richtig, was du überhaupt vorhast und dein Code erscheint auch eher fragwürdig.

Vielleicht tut die folgende Zeile schon was du willst:
Me.Recordset.AbsolutePosition =  Me.Recordset.AbsolutePosition +1

Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor
  •  

KonradR

  •  

KonradR

Zitat von: PhilS am Mai 18, 2024, 17:25:56Ich verstehe bisher nicht richtig, was du überhaupt vorhast und dein Code erscheint auch eher fragwürdig.

Ja, das war viel zu umständlich und kompliziert. Ich bin erstaunt, wie einfach sich mein Vorhaben auf eine Codezeile reduzieren lässt. Ich habe noch eine Schaltfläche, die nach dem Kombinationsfeld in dem Unterformular angeordnet ist. Das habe ich dann mit:
Me.cmdGweEinheitenSpezifisch.SetFocus gelöst.

  •