2

我希望根据客户 ID 将多页访问报告拆分为单独的 pdf 文件,然后根据客户名称(或 ID)保存这些 pdf 文件。

我已经研究过将报告“打印”/“转换”成一个巨大的 pdf 文件并在那里拆分,但是一些客户发票跨越两页以上,因此逐页拆分一个 pdf 文件是行不通的。

任何帮助将不胜感激; 如果有人需要对任何事情进行更多澄清,请随时告诉我。

4

2 回答 2

4

使用 Access 2007(请参阅下面的注释)或更高版本可以轻松做到这一点。

使用参数打开报表WhereCondition以将记录源限制为特定客户。

DoCmd.OpenReport "rptFoo", acViewPreview, , "Customer_ID = 1"

然后使用 OutputTo 以您提供的文件名将其保存为 PDF。

DoCmd.OutputTo acOutputReport, "", acFormatPDF, "Spacely_Sprockets.pdf"

之后关闭报告。

DoCmd.Close acReport, "rptFoo"

Customer_ID您可以创建一个为和数据打开记录集的过程Customer_Name,然后将这 3 个命令与每行的值一起使用。

如果您的 Access 版本早于 2007 年,您必须告诉我们您用于创建 PDF 文件的方法。

注意:对于 Access 2007,Office Service Pack 2 提供内置的另存为 PDF/XPS 支持

于 2012-07-16T06:37:23.853 回答
2

MS Access 2010 提供 PDF 打印功能,对于 2007 年,您可以安装 Microsoft 的附加组件:以 PDF 和 XPS 文件格式打印、共享和保护文件

对于 2007 之前的版本,您可以使用:

  • Stephen LeBan 的ReportToPDF仅包含两个 DLL,但仅适用于 MS Access

  • CutePDF是免费且易于使用的。

  • PDFCreator也是免费的,可以用 VBA 完全自动化(虽然最近没用过,相信这个功能还是可以的)

  • 任意数量的付费 PDF 创建者。

OpenReport 的 WHERE 参数自2003 版本(也是OpenReport 2010)以来可用

要为所有客户打印版本 2003、2007 和 2010 的报告,您可以循环浏览相关文件并

Dim rs AS DAO.Recordset
Set rs = CurrentDB.OpenRecordset("SELECT DISTINCT CustimerID FROM Invoices")

   Do While Not rs.EOF
      ''expression.OpenReport(ReportName, View, FilterName, 
      ''      WhereCondition, WindowMode) -- 2010 has OpenArgs

      DoCmd.OpenReport "Invoices",<..>,,"CustomerID=" & rs!CustomerID
      ''OutputTo or other relevant code

      rs.MoveNext
   Loop

获取 PDF 取决于您的版本和已安装的工具。例如,如果您使用的是 PDFCreator 或 CutePDF,则可以acViewNormal用于视图。PDFCreator 设置将允许您预先指定一个文件名,对于CutePDF,您必须填写一个文件名。对于 Access 2007 和 2010,您可以使用OutputTo,正如已经提到的那样,这acViewPreview是最好的。

要通过电子邮件发送 2007 年和 2010 年的报告,您可以使用SendObject。对于早期版本,您将需要更多代码。最简单的选择可能是自动化 Outlook。

于 2012-07-16T10:57:38.920 回答