Loops 创建循环以打开和导出报告
背景: 我有一个数据库,我正在为学校董事会制作。我正处于最后阶段,从来没有一个循环是我想不出来的…除了这一个 设置: 下面是运行报告“rpt\u SeatingChart\u AMFirst”的查询的SQL 它请求输入的表单是报告应该显示的学校。因此,如果我从combo113中选择school 1,报告将只显示分配给该学校的学生。我在这里找到了一张有学校的桌子:[tbl_学校]![学校名称] 执行:Loops 创建循环以打开和导出报告,loops,ms-access,while-loop,vba,ms-access-2016,Loops,Ms Access,While Loop,Vba,Ms Access 2016,背景: 我有一个数据库,我正在为学校董事会制作。我正处于最后阶段,从来没有一个循环是我想不出来的…除了这一个 设置: 下面是运行报告“rpt\u SeatingChart\u AMFirst”的查询的SQL 它请求输入的表单是报告应该显示的学校。因此,如果我从combo113中选择school 1,报告将只显示分配给该学校的学生。我在这里找到了一张有学校的桌子:[tbl_学校]![学校名称] 执行: 点击按钮时,我希望[rpt_SeatingChart_AMFirst]打开[tbl_School
点击按钮时,我希望[rpt_SeatingChart_AMFirst]打开[tbl_Schools]表中的第一个[School Name]。将该报告导出为PDF格式,然后作为表中的第二个[学校名称]关闭并重新打开。导出并重复,直到从表中打开该报告中的所有学校。我将从报告查询中的
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文件之前,您需要确保报告已完成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
谢谢你让我站起来跑步!我在你的代码中添加了一些东西,试图从中得到我需要的东西。我非常接近,但我希望我错过了一些小东西。它在表中的三条记录之间循环,并创建三个报告。但是,它没有将筛选器应用于报表。所有三所学校都出现在每份报告中,而不是每份报告都有一所学校。我希望我澄清得足够清楚!我将把代码放在下一个注释中,因为它太长了。
Private Sub GreenBinderReport_Click()Dim OP1 as String Dim RPT as String Dim rs as DAO.Recordset rs=CurrentDb.OpenRecordset(“从tbl_学校选择[学校名称]”)OP1=“C:\Users\Joel Dahl\Desktop\ExportTest\”RPT=“RPT\u SeatingChart\u TEST”Do While Not rs.EOF DoCmd.OutputTo acOutputReport,RPT,acFormatPDF'DoCmd.OpenReport“RPT_SeatingChart_TEST”,acViewPreview,“[School Name]=””&rs(0)和“'”rs.MoveNext循环集rs=Nothing End Sub
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