如何使用条件输出访问报告

时间:2014-06-19 08:44:32

标签: vba ms-access access-vba

美好的一天亲爱的

当我运行表单时,我有一个表单运行带有条件的报表过滤器(条件)正确地为报表工作

但是当我创建PDF(DoCmd.OutputTo)时,PDF返回所有值(过滤器或条件不会起作用)。

这是我的代码

 fSetAccessWindow (2)
DoCmd.OpenReport "Report1", acViewReport, _
                 "SELECT * FROM main WHERE ID LIKE '" & Nz(Me.cmrtxt, "*") & "' AND place_of_discharge_ar LIKE '" & Nz(Me.dischargecombo, "*") & "' AND border LIKE '" & Nz(Me.bordercombo, "*") & "'  AND a_date Between " & _
                 Format(Nz(Me.statrdatetxt, "01/01/1900"), "\#mm\/dd\/yyyy\#") & " And " & _
                 Format(Nz(Me.enddatetxt, "01/01/2900"), "\#mm\/dd\/yyyy\#"), , acDialog
                Me.Visible = True

                DoCmd.OutputTo acOutputReport, "Report1", "", "", False, "", 0

                 fSetAccessWindow (SW_HIDE)

任何人都可以为我修复

亲切的问候

2 个答案:

答案 0 :(得分:2)

我会将报告基于一个查询(如果不是这样)并且因为您知道运行时报表所需的SQL,您可以完全替换QueryDef中的SQL(使用正确的WHERE过滤器)并且输出报告。您不需要事先打开。省略OpenReport调用,只需执行以下操作:

CurrentDB.QueryDefs("qryMyReportBase").SQL = "SELECT * FROM main WHERE ID LIKE '" & Nz(Me.cmrtxt, "*") & "' AND place_of_discharge_ar LIKE '" & Nz(Me.dischargecombo, "*") & "' AND border LIKE '" & Nz(Me.bordercombo, "*") & "'  AND a_date Between " & _
                                             Format(Nz(Me.statrdatetxt, "01/01/1900"), "\#mm\/dd\/yyyy\#") & " And " & _
                                             Format(Nz(Me.enddatetxt, "01/01/2900"), "\#mm\/dd\/yyyy\#")

DoCmd.OutputTo acOutputReport, "Report1", acFormatPDF, "C:\MySavePath\Report1.pdf", False

显然,“qryMyReportBase”应该是报告的源查询,“C:\ MySavePath”应该是您的保存路径。

另外,我没有在OutputTo中看到您将类型指定为PDF的位置。既然你在上面提到了这一点,我已经加入了。

答案 1 :(得分:0)

每当您打开报表时,它会根据查询过滤数据并根据需要显示结果。问题是,要执行Docmd.OutputTo,首先必须关闭报告,当报告关闭时,过滤器效果将被清除,输出pdf将包含所有记录。

解决方法是,如果您不想预览报告,则可以使用acHidden代替acDialog,否则,如果您确实要预览报告,然后想要导出为pdf然后在表单上放置一个按钮和代码按钮,将报告导出为PDF格式。