我希望根据客户 ID 将多页访问报告拆分为单独的 pdf 文件,然后根据客户名称(或 ID)保存这些 pdf 文件。
我已经研究过将报告“打印”/“转换”成一个巨大的 pdf 文件并在那里拆分,但是一些客户发票跨越两页以上,因此逐页拆分一个 pdf 文件是行不通的。
任何帮助将不胜感激; 如果有人需要对任何事情进行更多澄清,请随时告诉我。
使用 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 支持。
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。