Personally, I don't like the navigation form approach. It gets very sticky when you need hierarchical interform communications. Instead, I would create a new form, say frmControl, and put buttons on that form to call up your other forms. Here's code for the buttons to call. You can hide frmControl when it loads another form. When the other form closes it can use the sub to call back frmControl. The code needs to go in a MODULE.
Code:
'------------------------------------------------------------------------
' Sub will hide current form and load/make visible a selected form.
' Params: GetForm - String name of form to swap to.
' ToControl - String control name to get focus in new form.
' Set to zero length string ( vbnullstring ) if none.
' Disp - Disposition of calling form
' "CLOSE" = Close calling form
' "KEEP" = Leave calling form unhidden
' Anything else including nullstring = hide calling form
'
'------------------------------------------------------------------------
Public Sub subSwapForm(GetForm As String, Optional ToControl As String, Optional Disp As String)
On Error GoTo LogErr
Dim i As Integer, IsLoaded As Integer
IsLoaded = False
Select Case Disp
Case "CLOSE"
Dim cf As Form
Set cf = Screen.ActiveForm
DoCmd.Close acForm, cf.Name
Set cf = Nothing
Case ""
Screen.ActiveForm.Visible = False
Case "KEEP"
Case Else
End Select
For i = 0 To Forms.Count - 1
If Forms(i).FormName = GetForm Then
IsLoaded = True
Exit For
End If
Next
If IsLoaded = True Then
Forms(i).Visible = True
Else
DoCmd.OpenForm GetForm
End If
If Len(ToControl) > 0 Then DoCmd.GoToControl ToControl
subSwapForm_exit:
Exit Sub
LogErr:
If Err = 2475 Then Resume Next
msgbox Err.Number & ", " & Err.Description & " subSwapForm of " & Name
Resume subSwapForm_exit
End Sub