使用已保存的报告模板并更新Recordsource,然后保存到文件

时间:2018-05-23 20:52:58

标签: vba ms-access-2013

我正在尝试输出报告。他们都遵循相同的信息,只针对不同的经理。我似乎无法获得任何正确的语法来修改必要的部分(Recordsource,Caption和包含set字符串的1个字段)。我不知道它是什么问我我可以得到代码来找到下一个管理器名称(记录源)并循环它们。我可以把代码输出到PDF文件没问题。这是我需要弄清楚的相关代码。这可能是完全错误的。我还没有真正处理过报道。

DoCmd.OpenReport "rptUsageReportTemplate", acViewReport
Reports("rptUsageReportTemplate").RecordSource = MngrUsgRptStr
Reports("rptUsageReportTemplate").Caption = MngrName & "'s " & Mnth & " Usage Report"
Reports("rptUsageReportTemplate").Controls("fldManagerHeader") = MngrName & "'s " & Mnth & " Usage Report"
Reports("rptUsageReportTemplate").Requery
DoCmd.Close acReport, "rptUsageReportTemplate", acSaveYes

“docmd.openreport”在那里,因为我无法停止收到错误2451 - 您输入的报告名称[...]拼写错误或引用未打开或不存在的报告msgstr“我知道它存在,而且我知道它拼写正确。所以它必须是一个开放的东西。如果我可以在幕后访问输出报告而不需要打开和关闭报告,那就太棒了。

简而言之,我想要的是我保存的报告是一个模板,只是多次更新值并将其保存到文件中。

1 个答案:

答案 0 :(得分:0)

假设你有一个“经理”表或类似的(tblManagersOrSuch),下面未经测试的子应该让你去...

Sub DoManagersReport(Mnth As Integer)
   Dim rsManagers As DAO.Recordset
   Set rsManagers = CurrentDb.OpenRecordset("tblManagersOrSuch")
   If Not rsManagers.EOF Then
      rsManagers.MoveFirst
      Do Until rsManagers.EOF
         DoCmd.OpenReport "rptUsageReportTemplate", acViewPreview, , , acHidden
         Reports("rptUsageReportTemplate").Caption = rsManagers!ManagerID & "'s " & Mnth & " Usage Report"
         Reports("rptUsageReportTemplate").Controls("fldManagerHeader") = rsManagers!ManagerID & "'s " & Mnth & " Usage Report"
         Reports("rptUsageReportTemplate").RecordSource = "Select * from MngrUsgRptStr Where ManagerID = " & rsManagers!ManagerID
         DoEvents
         Reports("rptUsageReportTemplate").Visible = True
         DoCmd.OutputTo acOutputReport, "rptUsageReportTemplate", acFormatPDF, "C:\" & rsManagers!ManagerID & " " & Mnth & " Usage Report.pdf"
         DoEvents
         DoCmd.Close acReport, "rptUsageReportTemplate"
      Loop
   End If
   'add error handling 

 End Sub

请注意,设置RecordSource会强制重新查询,因此您不需要这样做。 我还建议添加一个fileSaveAs函数来确定保存文件夹...