Я не вижу в вашем вопросе ничего, что указывает на то, что вам нужно что-то сложное.
Первым шагом является создание запроса, объединяющего школы и учащихся, и, когда он выполняется, экспорт в Excel через меню. Если это работает, то вам нужно изменить его так, чтобы вы выводили по одной школе за раз. Самый простой способ сделать это - добавить в запрос параметр School, чтобы при каждом запуске запроса отображалась только одна школа.
Теперь, если вы хотите автоматизировать это, это становится более сложным, потому что параметр будет мешать.
Итак, я предлагаю создать несвязанную форму, в которой есть поле со списком, отображающее список школ. Затем вы используете ссылку на это поле со списком в качестве критерия для своего запроса и используете его для управления кодом за командной кнопкой:
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
Теперь, это не автоматизирует процесс, но, по крайней мере, облегчает последовательный вывод каждого отчета.
Если вы хотите, чтобы это было автоматизировано, один из простых способов сделать это - привязать форму к таблице школ и привязать ваш запрос к отображению названия школы в форме. Затем вы можете заставить командную кнопку просмотреть записи формы и вывести отчет для каждой школы:
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
Это выведет электронную таблицу для каждой школы в таблице, которую вы привязали к форме.