I seem to be answering your post in tranches; here's the next one - but before proceeding let me stress that the example db I gave you is very crude and lacks validation and error handling. I excluded these to make the structure more obvious.
I like the way you made a dropdown box for switching between records, how did you do that?
I shall assume you know how to set up a combo box dropdown list. I just made sure there is a non null value in the combo box as the form is opened...
Code:
Private Sub Form_Load()
Me.cboPatientID = Me.PatientID
End Sub
... and then I set the combo box's 'Limit To List' to Yes, thus ensuring that it always contains a valid patient id. The bound column is column 1, the patient id. The bound column determines which of a selection of values is the value of the combo box. The bound column may be hidden but in this case, is not.
Now for the 'trick.' Access will synchronise a main/parent form with a subform provided that the main form is a single form. This is done through the Link Master/Child Fields of the subform control. (Terminology is a pain here since we now have at least three terms for the controlling form - Master, Main, Parent - and at least two for the following form - Child, Sub.) Anyway, although it is possible to code your own synchronisation, why reinvent the wheel? So I have mounted the combo box on a single form bound to the patients' table which will act as the Master form. Because I do not want the users to navigate inside the patients' table except via the combo box, I have removed all the form's usual navigation. I have included a bound textbox for patient id (that I would probably hide in the final implementation as I don't want users messing with it and it merely repeats the data shown in the combo box).
Because I've removed the form's navigation I need to substitute navigation based on the combo box value. For this I use the After Update event of the combo box.
Code:
Private Sub cboPatientID_AfterUpdate()
Dim rstClone As DAO.Recordset
Set rstClone = Me.RecordsetClone
rstClone.FindFirst "PatientID = " & Me.cboPatientID
Me.Bookmark = rstClone.Bookmark
Set rstClone = Nothing
Select Case Me.tabQuestionnaires.Value
Case 0
Me.sfrQuestionnaire01.SetFocus
Case 1
Me.sfrQuestionnaire02.SetFocus
End Select
End Sub
There are in fact two following subforms, one for each questionnaire, placed on separate pages of a tab control.
There's actually quite a lot to explain and I fear I've only done a partial job. I recommend you study my setup and code. Try searching the help for anything you don't understand and if you are still confused then get back to me.
I have been looking at your sample design, and it looks like you use modules. These look complex.
They're not really - well, they're as complex as you want to make them.