Supportnet / Forum / Datenbanken
Nächster Datensatz im Unterformular.
Frage
Hallo Ihr alle,
hallo Lieber El Bobbele,
Mit dem Code wird nun der Sprung in den Code im Unterformular geschafft:
Forms![3frmGrfakt]![3frmGrfaktMU1]![3frmGrfaktVU2].Form.Nexter
Damit hast du mur eine guten Tipp geliefert wie die Routine vom Modul aus in das Unterformular springen kann. Dann bleibt sie aber mit der Meldung hängen:
Sie Können die GehteZuDatensatz-Aktion bzw. die GoToRecord-Methode nicht für ein Objekt ausführen, das sich in der Entwursansicht befindet. Bla-bla ...
UF in Formularansicht, der Code im Unterformular:
Public Sub Nexter()
Me.Beschreibung.SetFocus
DoCmd.RunCommand acCmdSave
DoCmd.GoToRecord , , acNext
End Sub
Immer an der letzten Zeile. Keiner meiner Bekannten weis warum!? Wer kennt sich hier aus. Verweise auch auf den Beitrag im Forum hier - "Movenext im Unterformular aus einem Modul heraus?"
Für Hilfe danke ich sehr
Anton
Antwort 1 von El Bobbele
Hallo Anton!
Ich habe dein Szenario zwischenzeitlich nachgebaut. Den genannten Fehler kann ich reproduzieren, wenn ein weiteres Formular offen ist, das zum Zeitpunkt der Codeausführung den Fokus besitzt. Um die GotoRecord-Anweisung ausführen zu können, braucht das betroffene GotoRecord-Formular aber selbst den Fokus. Der nachfolgende Code ist beim Probieren entstanden und sollte dieses Problem in den Griff bekommen.
Der Haken an der Sache ist, dass der Fokus eben dauerhaft auf deinem Formular verbleibt. Soll er zurück zum Aufrufer, muss eben dort wird ein SetFocus ausgeführt werden. Zurück bleibt dann immerhin noch ein unschönes "Fensterzucken".
Ich hatte übrigens deine Antwort in deinem letzten Beitrag leider übersehen. Der Nickname El Bobbele ist eine Mischung aus dem spanischen Nickname eines Freundes und dem Spitznamen von Boris Becker. Ein Nickname geht während seiner Entstehung manchmal seltsame Wege, gelle? :D
Gruss
El Bobbele
Ich habe dein Szenario zwischenzeitlich nachgebaut. Den genannten Fehler kann ich reproduzieren, wenn ein weiteres Formular offen ist, das zum Zeitpunkt der Codeausführung den Fokus besitzt. Um die GotoRecord-Anweisung ausführen zu können, braucht das betroffene GotoRecord-Formular aber selbst den Fokus. Der nachfolgende Code ist beim Probieren entstanden und sollte dieses Problem in den Griff bekommen.
'Code im betroffenen Formular
Public Sub MoveFirst()
Move acFirst
End Sub
Public Sub MoveLast()
Move acLast
End Sub
Public Sub MoveNext()
Move acNext
End Sub
Public Sub MovePrevious()
Move acPrevious
End Sub
Public Sub MoveNewRec()
Move acNewRec
End Sub
Public Sub MoveOffset(Offset As Long)
Move acGoTo, Offset
End Sub
Private Sub Move(Record As AcRecord, Optional Offset As Variant)
'Das betroffene Formular muss den Fokus besitzen. Bei Unter-
'formularen muss jeder Ebene einzeln der Fokus zugewiesen werden.
'Eine direkte Fokuszuweisung auf die unterste Ebene reicht nicht aus.
Forms!Formular1.SetFocus
Forms!Formular1!Formular2.SetFocus
Forms!Formular1!Formular2!Formular3.SetFocus
On Error GoTo Err_Move
DoCmd.GoToRecord , , Record, Offset
Exit_Move:
Exit Sub
Err_Move:
If Err.Number <> 2105 Then
MsgBox "Laufzeitfehler '" & Err.Number & "':" & _
vbCrLf & vbCrLf & Err.Description, vbCritical
End If
Resume Exit_Move
End Sub
Der Haken an der Sache ist, dass der Fokus eben dauerhaft auf deinem Formular verbleibt. Soll er zurück zum Aufrufer, muss eben dort wird ein SetFocus ausgeführt werden. Zurück bleibt dann immerhin noch ein unschönes "Fensterzucken".
Ich hatte übrigens deine Antwort in deinem letzten Beitrag leider übersehen. Der Nickname El Bobbele ist eine Mischung aus dem spanischen Nickname eines Freundes und dem Spitznamen von Boris Becker. Ein Nickname geht während seiner Entstehung manchmal seltsame Wege, gelle? :D
Gruss
El Bobbele

