创建循环以打开和导出报告

Create loop to open and export reports

背景: 我有一个正在为学校董事会制作的数据库。我正处于最后阶段,从来没有遇到过我无法弄清楚的循环......除了这个。

设置: 这是运行报告 "rpt_SeatingChart_AMFirst"

的查询中的 SQL
SELECT tbl_Students.SchoolName, tbl_Students.StudentCalculated, tbl_Stops.[Stop Location], tbl_Stops.[Stop Time], tbl_Students.AssignSeat, tbl_Students.DateOB, tbl_Students.Address, tbl_Students.Zip, tbl_Students.Phone1, tbl_Students.Phone2, tbl_Students.Grade, tbl_Students.PhysicalLimitations, tbl_Students.ParentReq, tbl_Schools.[School Name], tbl_Students.ActiveRider
FROM tbl_Schools INNER JOIN (tbl_Stops INNER JOIN tbl_Students ON tbl_Stops.ID = tbl_Students.[Stop LocationAM]) ON (tbl_Schools.ID = tbl_Stops.School) AND (tbl_Schools.ID = tbl_Students.SchoolName)
WHERE (((tbl_Schools.[School Name])=[Forms]![frm_SchoolPickerAM]![Combo113]) AND ((tbl_Students.ActiveRider)="Active"));

它要求输入的表格是报告应该显示的学校。因此,如果我从 combo113 中选择 School1,报告将只显示分配给该学校的学生。我有一个 table,里面有学校:[tbl_Schools]![SchoolName]。

执行: 在按钮的单击事件中,我希望使用 [tbl_Schools] table 中的第一个 [School Name] 打开 [rpt_SeatingChart_AMFirst]。将该报告导出为 PDF,作为第二个 [学校名称] int he table 关闭并重新打开。导出并重复,直到 table.

报告中的所有学校都开学了

我会从报表查询的 WHERE 子句中取出 [School Name] 条件,以便您可以在打开报表时指定它。您的按钮事件需要打开记录集

Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("select [School Name] from tbl_Schools")

然后您可以遍历此记录集并将学校名称传递给 OpenReport 命令

While Not rs.EOF
    DoCmd.OpenReport "rpt_SeatingChart_AMFirst", , , "[School Name] = '" & rs(0) & "'"
    rs.MoveNext
Loop

Set rs = Nothing 

这完全是靠记忆,因此您可能需要检查 OpenReport 命令中的逗号数量 - 这是您要查找的 Where condition 参数。如果您想从具有所选组合框值的表单中打开报表,您可以使用相同的 Where condition 技巧。

希望对您有所帮助。

[编辑] 我刚发现 PDF 要求。我为此所做的是创建一个特定的 PDF 版本的报告,您可以在其中设置报告的属性以打印到特定的打印机,即 PDF 打印机驱动程序。在循环中,您可以使用学校名称重命名 PDF 文件,这样它就不会被下一所学校的报告覆盖。

[另一个编辑!] 刚记起来,您需要确保报告已完成创建 PDF 文件,然后再尝试重命名它。我不记得这个的确切代码,所以除非其他人在此期间发布更好的答案,否则你需要等到我回到办公室才能给你这个。

我无法添加评论,但请尝试对 Skippy 发布的内容进行此编辑。

While Not rs.EOF
    DoCmd.OpenReport "rpt_SeatingChart_AMFirst", , , "[School Name] = '" & rs.fields("[School Name]").value & "'"
    rs.MoveNext
Loop

Set rs = Nothing 

按如下方式编辑您的代码:

Private Sub GreenBinderReport_Click() 

    Dim OP1 As String
    Dim RPT As String
    Dim rs As DAO.Recordset

    Set rs = CurrentDb.OpenRecordset("select [School Name] from tbl_Schools")
    OP1 = "C:\Users\Joel Dahl\Desktop\ExportTest\"
    RPT = "rpt_SeatingChart_TEST"

    Do While Not rs.EOF
        DoCmd.OpenReport "rpt_SeatingChart_TEST", acViewPreview, , "[School Name] = '" & rs(0) & "'"
        DoCmd.OutputTo acOutputReport, RPT, acFormatPDF, OP1 & rs(0) & ".pdf"
        DoCmd.Close acReport, RPT
        rs.MoveNext
    Loop

    Set rs = Nothing
End Sub