I can't see anything in your question that indicates you need anything complicated.
The first step is to create a query that joins the schools and students and when that runs, export to Excel via the menus. If that works, then you need to alter it so that you are outputting one school at a time. The "easy" way to do this would be to add to your query a parameter on School so that each time the query runs, you're displaying only one school.
Now, if you want to automate that, it becomes more complicated because the parameter will get in the way.
So, my suggestion would be to create an unbound form that has a combo box on it that displays the list of schools. You then use a reference to that combo box as criteria for your query, and use that to drive the code behind a command button:
Private Sub cmdOutputSchool_Click()
If IsNull(Me!cmbSchool) Then
MsgBox "You must first choose a school from the dropdown.", _
vbExclamation, "Choose a school"
Else
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, _
"qrySchoolOutput", CurrentProject.Path & "\" & Me!cmbSchool & ".xls"
End If
End Sub
Now, this doesn't automate the process, but it at least makes it easy to output each report in succession.
If you wanted it to be automated, one easy way to do that would be to bind the form to the Schools table, and bind your query to the display of the School Name on the form. Then you could have the command button walk through the records of the form and output the report for each school:
Private Sub cmdOutputSchool_Click()
With Me.RecordsetClone
.MoveFirst
Do Until .EOF
Me.Bookmark = .Bookmark
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, _
"qrySchoolOutput", CurrentProject.Path & "\" & Me!SchoolName & ".xls"
.MoveNext
Loop
End With
End Sub
This will output a spreadsheet for each school in the table you've bound to the form.