将访问报告保存为PDF文件

时间:2013-04-18 14:10:07

标签: ms-access pdf

我目前正在生成访问报告,一旦生成,应该保存到用户输入的保存位置。

这是我的代码块。

ReportName = "Appraisal_" & Trim(Str(Year)) & "_" & Me.empnr & "_" & Veilig(Me.empnr) & "_" & Format(Now(), "YYYY_MM_DD_HH_MM_SS")
DoCmd.CopyObject , ReportName , acReport, "rpt_beoordelen"
DoCmd.OpenReport ReportName , acViewPreview, , "EmployeeNr='" & Me.empnr & "'  and year=" & Me.Year
DoCmd.OutputTo acOutputReport, "", acFormatPDF, , True
DoCmd.Close acReport, ReportName 

这将生成并显示具有正确值的报告。它要求保存位置。并且,一旦给出,尝试将文件保存到给定位置。它会快速闪烁打印PDF以显示位置窗口。

此后程序停止。在给定位置找不到文件,报告仍然打开。调试应用程序向我显示

DoCmd.Close acReport, ReportName

永远不会到达。我没有得到错误消息,我不知道出了什么问题。谁能给我一个解决这个问题的方法呢?

1 个答案:

答案 0 :(得分:0)

如果您通过将DoCmd.OutputTo留空(参考:here)来让ObjectName无法使用“活动对象”,那么您可以试试这个:

打开“rpt_beoordelen”报告并将其Record Source查询另存为名为“rpt_beoordelen_base_data”的已保存查询。使用一些通用SQL创建“rpt_beoordelen_data”保存的查询,如...

SELECT * FROM rpt_beoordelen_base_data

...然后将“rpt_beoordelen_data”作为[rpt_beoordelen]报告的Record Source

现在将问题中的代码更改为以下内容:

ReportName = "Appraisal_" & Trim(Str(Year)) & "_" & Me.empnr & "_" & Veilig(Me.empnr) & "_" & Format(Now(), "YYYY_MM_DD_HH_MM_SS")
DoCmd.CopyObject , ReportName , acReport, "rpt_beoordelen"
Dim cdb As DAO.Database
Set cdb = CurrentDb
Dim qdf As DAO.QueryDef
Set qdf = cdb.QueryDefs("rpt_beoordelen_data")
qdf.SQL = "SELECT * FROM rpt_beoordelen_base_data WHERE EmployeeNr='" & Me.empnr & "'  and year=" & Me.Year
Set qdf = Nothing
DoCmd.OutputTo acOutputReport, ReportName, acFormatPDF

这会将您DoCmd.OutputTo的调用更改为不依赖于“活动对象”的调用,并且可能会产生您想要的结果。 (FWIW,这是我使用这种方法生成PDF版本报告的唯一方法。)