Supportnet Computer
Planet of Tech

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.



'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