OK, I think I understand. If you ask 10 Access programmers how to fulfil your requirements you will get eleven solutions; some solutions will be more suited to a particular setup than others. I however offer only one solution. 
OK, what I will do is explain how I intend to fulfil your requirement (including some commentary and theory) before going on to give you practical help with the implementation itself. I always believe in trying to explain because then maybe my correspondents can sort a few things out for themselves. If I’m too detailed or saying things you already know then tell me.
There is a VBA object class called a Collection and Albert uses an instance of this class to store the record number of the rows selected. As a record is selected it is added to the collection and if it is deselected it is removed from the collection. When a resultant string is required, Albert loops through the collection concatenating the record numbers. He also interrogates this collection to determine whether each checkbox should be true or false.
You now have ten copies of the form and therefore you have ten collections. Moreover these ten forms are subforms and you need to address them from the main form. I propose your main form also has a collection. When a resultant string is required, each of the collections on the subforms is interrogated in turn and the selected record numbers added to the main form collection. Then the resultant string is built from the main form’s collection. The main form collection can be built so that the record numbers are sorted and duplicates dropped! It would be possible to maintain the main form’s collection as you go along but then subforms need to either push data to the main form or alert the main form that a row has been (de)selected. I prefer my solution because it is more straightforward and Albert’s form may be used with minimal change.
You could also simply extract the ten strings and concatenate them – the solution you were trying to find for yourself. Again, I prefer my solution because you can sort the record numbers and because the string handling is much simpler.
A situation that confuses every beginner with Access is the way of addressing a subform. The main form has a control in which the subform is displayed. This control is not the subform. Many beginners confuse the control and the subform and address the control thinking they are addressing the subform. This is not helped by the fact that Access uses the subform’s name as the default name for the control (or used to, I haven’t checked lately). The control has a property called Form that is a reference to the form displayed. So the general pattern of addressing a subform is:
Me.sfrControl.Form
It gets tedious typing this out in full each time so I recommend a local variable is dimensioned to act as an alias. You have defined your subform control names in a consistent manner and it will be possible to loop through these controls – is the tenth called ‘sfrmCourses10?’ (BTW The accepted Reddick tag for a subform control is ‘sfr’ without the ‘m’ but no matter.)
OK, let’s get on with it. I am assuming you are comfortable with navigating around the VBA coding window and the form design window (including the property sheets). If you aren’t, shout.
There is one change and only one change to make to Albert’s code. (Some of the code is now redundant but we can leave it there. I also assume you have removed the command buttons.) We need to make the subform’s collection ‘visible’ to the main form. In the VBA coding window for FORM_UnboundCheckBox (or whatever you’ve now called it) find the line (it’s at the top)
Code:
Dim colCheckBox As New Collection
And change it to be
Code:
Public colCheckBox As New Collection
You may also want to ‘comment out’ the Debug.Print statement. It doesn’t get in the way but ‘every little helps.’
Now there’s quite a bit to add to the main form but it’s straightforward. Display your main form’s module in the VBA coding window. If it doesn’t show in the hierarchy then display your main form in design view and check that the value of Has Module (‘Other’ tab in the Property Sheet window) is set to ‘Yes.’
I attach what your main form module should look like. I have renamed the command buttons as btnShow and btnClear. (This makes much more sense than command14 and command17.) I have not programmed for the report – one step at a time – when this is working for you let’s do the report. Or maybe you can have a go. 
Code:
Option Compare Database
Option Explicit
Private mcolSelected As New VBA.Collection
Private mfrmSub As Form_UnBoundCheckBox 'Use your own name if necessary.
Private Sub BuildCollection()
Dim i As Integer
Dim j As Integer
Set mcolSelected = Nothing 'Quick trick to empty the main collection.
For i = 1 To 10
Set mfrmSub = Me.Controls("sfrmCourses" & CStr(i)).Form 'Set mfrmSub for each subform in turm.
For j = 1 To mfrmSub.colCheckBox.Count
AddToMainCollection mfrmSub.colCheckBox(j) 'Adds the record id in sequence.
Next j
Next i
Set mfrmSub = Nothing
End Sub
Private Sub AddToMainCollection(rlngRecordID As Long)
Dim i As Integer
For i = 1 To mcolSelected.Count
If mcolSelected(i) = rlngRecordID Then Exit Sub 'Drop duplicate record ids.
If mcolSelected(i) > rlngRecordID Then
mcolSelected.Add rlngRecordID, , i 'Add in sequence.
Exit Sub
End If
Next i
mcolSelected.Add rlngRecordID 'Add at end
End Sub
Private Function BuildSelectionString() As String
Dim i As Integer
For i = 1 To mcolSelected.Count
If BuildSelectionString <> "" Then BuildSelectionString = BuildSelectionString & ","
BuildSelectionString = BuildSelectionString & CStr(mcolSelected(i))
Next i
End Function
Private Sub btnClear_Click()
Dim i As Integer
For i = 1 To 10
Set mfrmSub = Me.Controls("sfrmCourses" & CStr(i)).Form
Set mfrmSub.colCheckBox = Nothing
mfrmSub.Check11.Requery
Next i
Set mfrmSub = Nothing
End Sub
Private Sub btnShow_Click()
BuildCollection
If mcolSelected.Count = 0 Then
MsgBox "Nothing selected."
Else
MsgBox "Records selected = " & BuildSelectionString
End If
End Sub
My test with only two subforms suggest this is quite slow. It's nothing I have done ("Honest guvner!") but is due to the Access reaction time of the checkbox control source and requery.