Neuigkeiten:

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

Mobiles Hauptmenü

Formular aktualisiert nicht

Begonnen von Thüringer, August 28, 2026, 09:52:25

⏪ vorheriges - nächstes ⏩

Thüringer

Die Frage: Der Befehl speichert und schließt das formluar frm_liste_neu. Aber er refresht nicht frm_liste.

frm_liste befindet sich als Unterformular in frm_frame und heißt dort frm_liste.

Was muss man anstelle von Forms.frm_liste.Requery schreiben?


Private Sub Befehl122_Click()
 On Error GoTo Err_Befehl122_Click
     DoCmd.Close acForm, "frm_liste_neu", acSaveYes
      Forms.frm_liste.Requery
     'Me!frm_frame.Form.Requery
     'Me!frm_frame.Form.Reload
Exit_Befehl122_Click:
     Exit Sub
Err_Befehl122_Click:
     'MsgBox Err.Description
     Resume Next
     Resume Exit_Befehl122_Click
End Sub

Knobbi38

Hallo,

es gibt zwei Dinge, die du bei Access beachten mußt:
  • Unterformulare erscheinen nicht in der Forms-Auflistung, könnenn also darüber nicht direkt angesprochen werden.
  • Access benennt ein SubForm-Control im Designer immer nach dem zugewiesenen Formular. Das muss man nachträglich ändern und dem SubForm-Control einen anderen Namen vergeben, z.B. mit einem Präfix "sub" oder "sfc", je nach Namenskonvention.

Aus dem o.a. folgt dann: wenn du ein Requery auf ein geladenes UF aus dem HF veranlassen möchtest, warum auch immer, kannst du das einfach über das Steuerelement (SubForm-Control) ansprechen:
me.<subformcontrolname>.form.requery
Eigentlich sollte das aber nicht notwendig sein.

Knobbi38

PS:
ZitatResume Next
     Resume Exit_Befehl122_Click
Der Code ist leider fehlerhaft. "Resume Next" gehört da nicht hin und kann u.U. eine Endlosschleife verursachen!

Thüringer


Mein Text sieht jetzt so aus. Er gibt an, dass er "ufofrm_liste" nicht finden kann. Das SubForm-Control heißt aber so. Das darin befindliche Formular ist "frm_liste" und soll aktualsiert werden. Was kann falsch sein?

Private Sub Befehl122_Click()
 On Error GoTo Err_Befehl122_Click
     DoCmd.Close acForm, "frm_liste_neu", acSaveYes
     Me.ufofrm_liste.Form.Requery
Exit_Befehl122_Click:
     Exit Sub
Err_Befehl122_Click:
     Resume Exit_Befehl122_Click
End Sub

Knobbi38

Hier kannst du nachlesen, wie in Access die Referrer aufgebaut sind:
http://access.mvps.org/access/forms/frm0031.htm

Wenn du  Me.ufofrm_liste.Form.Requery im HF aufrufst und ufofrm_liste sich im HF befindet, sollte das UF die Daten neu laden.

Und noch ein Tipp:
   DoCmd.Close acForm, "frm_liste_neu", acSaveYes

speichert nur die Änderungen eines Formulars im Entwurfsmodus, nicht die Daten!

Knobbi38


Beaker s.a.

Hallo,
DoCmd.Close acForm, "frm_liste_neu", acSaveYes
     Me.ufofrm_liste.Form.Requery
Probiere mal die Reihenfolge umzudrehen. Denn wenn der Vorgang
des Schliessens genau umgekehrt zum Öffnen (UFo -> HFo) abläuft
(habe jetzt keine Lust das auszuprobieren/nachzuschlagen) ist
das UFo schon nicht mehr geladen, und die Referenz läuft ins
Leere.

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Thüringer

Zitat von: Knobbi38 am August 28, 2026, 18:57:47Hier kannst du nachlesen, wie in Access die Referrer aufgebaut sind:
http://access.mvps.org/access/forms/frm0031.htm

Wenn du  Me.ufofrm_liste.Form.Requery im HF aufrufst und ufofrm_liste sich im HF befindet, sollte das UF die Daten neu laden.

Und noch ein Tipp:
   DoCmd.Close acForm, "frm_liste_neu", acSaveYes

speichert nur die Änderungen eines Formulars im Entwurfsmodus, nicht die Daten!

Knobbi38



Und wie müsste der Befehl lauten, wenn ich "Me.ufofrm_liste.Form.Requery" aus einem anderen Formular heraus aufrufe? Mir ist gerade aufgefallen, dass der Befehl in einem Popup steht, daher funktioniert nicht.

Thüringer

Ich versuche das jetzt mit einem Formular mit der Eigenschaft Daten/Daten eingeben, wo alle Felder drin sind. Dort gibt Access auch unter (1) an, dass er "Forms!frm_liste" nicht finden kann, das aber geöffnet ist in einem Unterformular-Steuerelement. Woran kann das liegen? In einer anderen Datenbank funktioniert das normal.

Private Sub Befehl152_Exit(Cancel As Integer)
Dim datensatzID As Long
Dim targetForm As Form

' 1. Verweis auf das geöffnete Endlosformular setzen
Set targetForm = Forms!frm_liste

' 2. Aktuelle ID aus dem steuernden Formular merken (Anpassung je nach Feldname)
datensatzID = Me!ID

' 3. Endlosformular komplett neu laden
targetForm.Requery

' 4. Den aktualisierten Datensatz im Endlosformular wieder ansteuern
With targetForm.RecordsetClone
    .FindFirst "ID = " & datensatzID
    If Not .NoMatch Then
        targetForm.Bookmark = .Bookmark
    End If
End With

Set targetForm = Nothing
End Sub

Knobbi38

ZitatDort gibt Access auch unter (1) an, dass er "Forms!frm_liste" nicht finden kann, das aber geöffnet ist in einem Unterformular-Steuerelement
Du musst auch die Antworten lesen! Diese Frage wurde schon in #1 beantwortet, warum das nicht geht

und auch dieser Frage
ZitatUnd wie müsste der Befehl lauten, wenn ich "Me.ufofrm_liste.Form.Requery" aus einem anderen Formular heraus aufrufe?
wurde schon mit dem Link beantwortet, wo du passende Beispiele findest.

Beaker s.a.

Hallo,

Du kannst ein UFo-Form nur aus dem HFo ansprechen
Me.UFoControlName.Form.Requeryoder von AUSSEN nur über das HFo
Forms.NameDesHFos.UFoControlName.Form.Requery
Hier noch ein zweiter Link, der dir vlelleicht helfen kann[/td][/tr][/table]
https://www.donkarl.com?FAQ4.2
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Thüringer

Ich habe das jetzt mit Hilfe von Beakers Link hinbekommen. Extra Formular zum hinzufügen beim klick.


    If Me.Dirty Then
    Me.Dirty = False
    End If
    DoCmd.Close acForm, Me.Name, acSaveNo
    Forms!frm_frame!ufofrm_liste.Form.Requery
    Exit Sub
   
Jetzt versuche ich, die Funktion dazu zu bringen, zum neu hinzugefügten Datensatz zu springen.

' 1. Verweis auf das geöffnete Endlosformular setzen
Set targetForm = Forms!frm_frame!ufofrm_liste!frm_liste
' 2. Aktuelle ID aus dem steuernden Formular merken (Anpassung je nach Feldname)
datensatzID = Me!ID
' 3. Endlosformular komplett neu laden
targetForm.Requery
' 4. Den aktualisierten Datensatz im Endlosformular wieder ansteuern
With targetForm.RecordsetClone
    .FindFirst "ID = " & datensatzID
    If Not .NoMatch Then
        targetForm.Bookmark = .Bookmark
    End If
End With
Set targetForm = Nothing


Problem: Er erkennt den selben Ausdruck plötzlich nicht mehr. Woran kann das liegen?

Forms!frm_frame!ufofrm_liste!frm_liste

mmarschner

Du hast einen Schreibfehler:

Forms!frm_frame!ufofrm_liste!frm_liste


Thüringer

Aber das ist doch der selbe Ausdruck. Wo ist da ein Schreibfehler?

mmarschner

Du hast oben den Verweis auf das Unterformular

Forms!frm_frame!ufofrm_liste.Form.Requery

Und unten hast Du

Set targetForm = Forms!frm_frame!ufofrm_liste!frm_liste

Nach der Schreibweise würde ich jetzt vermuten, dass frm_liste den Fehler verursacht.

Knobbi38

Hallo,

du kannst doch nicht einfach eine eigene Syntax entwerfen und dann hoffen, dass so etwa funktioniert.  ::)

Mehrfach hat man dir jetzt erklärt, wie eine Referenz auf ein Unterformular gesetzt wird und alles geflissentlich ignoriert.

@Beaker s.a. hat dir doch die Lösung in #8 gegeben. Vielleicht solltest du doch mal ein Buch über Access/VBA zur Hand nehmen und dort das ein oder andere nachlesen. Das sind Grundkenntnisse, welche du zwingend für die Umsetzung deines Projekts brauchst. Anders als mit Excel ist Access "nur" ein Tool, mit dem man Datenbankanwendungen erstellen kann und man kann nicht wie in Excel einfach mit ein paar Formeln so etwas  zusammen klicken. Mit Access ist die Lernkurve eine ganz andere und ohne Einarbeitung läuft da gar nichts.

Tip: Beschäftige dich mal mit dem Bang-Operator (!). Hilfestellungen und Informationen dazu gibt es im Internet zu hauf, so dass das hier nicht nochmal aufgegriffen werden muss.

Knobbi38

Beaker s.a.

Kannst du deinen Code mal im Zusammenhang posten.
DoCmd.Close acForm, Me.NameWelches Form ist das?
Wenn das dieses ist,
ZitatAktuelle ID aus dem steuernden Formular merken
dann gibt es nach dem Schliessen keine ID mehr, und ein Zugriff
von aussen ist auch nicht mehr möglich.

Warum willst du überhaupt von aussen (steuerndes Formular) auf
das UFo zugreifen?

Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)