1

私は約1500人の生徒とその先生がいるテーブルを持っています。152人の先生がいます。教師が持っている集合的な学生は彼らのケースロードです。ケースロードを表示するExcelファイルを出力したいと思います。もし私がこのブルートフォースをやっていたとしたら、それは簡単なことでしょう。ただし、Accessがループして各教師のExcelファイルを作成できるように設定する方法はありますか。生徒用テーブルに加えて、すべての教師がいる教師用テーブルがあります。また、ループがそれらをカウントできるように、それぞれに番号を割り当てました。私は自分がやりたいことの構造を理解していますが、それを実行するための最良の方法がわかりません。正直なところ、コードはハハ。いずれにせよ、私が以下に持っているのは、基本的に、表にあるものです。テーブル名はStudentsとTeachersです。

Students
 Student_Number Student_Name   Teacher_Number

Teachers
 Teacher_Number   Teacher_Name 

それは基本的に私がここに持っているものです。私は、通常の状況では、名前を接続フィールドとして使用することは恐ろしい決断であることを認識しています。ただし、これはこれら2つのフィールドより大きくなることはなく、毎年最初からこれを行う必要があるため、今年は名前が重複していないため、名前の重複に問題が発生することはないと思います。基本的に、これらのテーブルは変更されないので、更新について心配する必要はありません。基本的に、この小さなことについては、正規化などの心配はありません。

4

1 に答える 1

2

教師テーブルをループして、既存のクエリに文字列を割り当てます。

 Dim qdf As QueryDef
 Dim rs As DAO.Recordset

 ''Make sure you have a query that can be overwritten called OutputStudents
 ''or this will not work. You can create a query in VBA and do the checks 
 ''as to whether a query by that name exists, but this is simpler
 Set qdf = CurrentDB.Querydefs("OutputStudents")
 Set rs = CurrentDB.OpenRecordset("Teachers")

 Do While Not rs.EOF
    ''Set the sql of a query called OutputStudents (see above)
    qdf.SQL = "SELECT * FROM Students WHERE Teacher_Number=" & rs!Teacher_Number

    ''Output to Excel
    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel8, _
       qdf.Name, "Z:\docs\" _
       & Teacher_Number & ".xls", True
    rs.MoveNext
Loop

またはそこについて。

于 2013-01-09T15:08:19.263 に答える