If you want mandatory fields and want to be able to leave a particular record/form at the end of the day to return to tomorrow, a solution would be:
remove 'required' set as yes
Add "reqd" (or similar) to the tag property for each of the mandatory fields.
Create a table:
IncompleteIDS (autonumber)
IncompleteID (number)
Create a dialog form with 3 buttons (fdlgMand in this example)
Continue
Save and Exit
Discard
On the close button of your main form add something like:
Dim ctrl As control
For Each ctrl In Me.Controls
If ctrl.Tag = "Reqd" Then
If IsNull(ctrl) Then
DoCmd.OpenForm "fdlgMand", , , , , , ctrl.Name
Exit Sub
Else
DoCmd.RunSQL ("delete * from tblIncomplete")
DoCmd.Close acForm, "Myform"
Exit Sub
End If
End If
Next ctrl
If a mandatory field is not complete it will open fdlgMand
FdlgMand:
Discard button ... add some code to remove the record and delete all from tblIncomplete
Continue Button... returns to main form to continue
Save and Exit... On the onclick event add something like:
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("select * from tblincomplete;")
With rs
.AddNew
!incompleteRec = [Forms]![MyForm]![ID]
.Update
End With
'Clean up
rs.Close
Set rs = Nothing
DoCmd.Close acForm, "MyForm"
DoCmd.Close acForm, "fdlgMand"
This saves the ID number of the incomplete form to tblIncomplete and closes fdlgmand and Myform
So you now have a record of which form is incomplete.
On the button to open your main form add something like the following:
Dim intIncomplete As Integer
intIncomplete = Nz(DLookup("incompleterec", "tblincomplete"), 0)
If intIncomplete > 0 Then
DoCmd.OpenForm "MyForm", , , "[ID] = " & intIncomplete
Else
DoCmd.OpenForm "MyForm"
End If
So when you return the following day and press the button to open your form it will take you directly to the form left incomplete the night before.
If you have multiple users and each may leave a form incomplete, add a simple login form and capture their ID to include in the dlookup.
You will need to tighten up the code but it will work.