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



背景:我有一个数据库,正在为学校董事会制作。我处于最后阶段,从来没有一个我不知道的循环...除此之外。

设置:这是运行报告" 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,则报告只会显示分配给该学校的学生。我有一张桌子上有一张学校的桌子:[tbl_schools]![schoolname]。

执行:在单击按钮的单击事件中,我想在[tbl_schools]表中使用第一个[School name]打开[rpt_seatingchart_amfirst]。将该报告作为PDF导出,并以第二个[学校名称]的桌子重新打开。出口并重复,直到所有学校从桌子上开放。

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

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

然后,您可以循环浏览此记录集,然后将学校名称传递到OpenReport Command

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文件之前,请确保该报告已完成。我不记得这是此的确切代码,因此除非其他人在此期间发布更好的答案,否则您需要等到我回到办公室之前才能给您。

编辑代码如下:

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:UsersJoel DahlDesktopExportTest"
    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

我无法添加评论,但请尝试使用Skippy发布的内容。

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

相关内容

  • 没有找到相关文章

最新更新