我的组织使用MS Access数据库存储事件报告。我有一个名为“案例详细信息”的报告,我希望可以选择将当前打开的报告另存为PDF。我已经使它大部分工作了,唯一的问题是,在保存PDF时,它会保存所有记录,而不仅仅是保存正在查看的记录。
如何解决它,使其仅使用记录的ID保存正在查看的记录?
这是保存按钮的代码。
Private Sub Command1626_Click()
DoCmd.OutputTo acOutputReport, "Case Details", acFormatPDF, "G:\Police\Restricted\Saved Reports\ " & Me.txtPDFRef & ".pdf", True
End Sub
报告上的“ txtPDFRef”框包含以下代码,用于命名报告。 (案例编号-人员-保存日期)
="CR" & Format(Date(),"yy") & "-000" & [ID] & " - " & [ReportingOfficer] & " - " & Format(Date(),"yyyymmdd")
答案 0 :(得分:0)
似乎唯一的方法是将报告过滤到要打印的记录。
因此,确定要打印的记录的ID
至关重要。
我不清楚,您的按钮是位于报表本身还是位于表单上。
当按钮位于报表本身上时,我试图使其运行。
要确定当前的ID
,似乎有必要在报告的详细信息部分中找到调用按钮。
然后,您可以过滤报告,将其导出为pdf并恢复应用之前的过滤器。
唯一的退步是,在执行代码后,我无法查看报告中最后查看的记录。 相反,您在第一条记录上。
这将是按钮的代码:
Dim currentFilter As String
currentFilter = Me.Filter
Dim currentFilterOn As Boolean
currentFilterOn = Me.FilterOn
'If field type of ID is a number use this:
Me.Filter = "[ID] = " & Me.ID
'If field type of ID is a string use this:
'Me.Filter = "[ID] = '" & Me.ID & "'"
Me.FilterOn = True
DoCmd.OutputTo acOutputReport, Me.Name, acFormatPDF, "G:\Police\Restricted\Saved Reports\ " & Me.txtPDFRef & ".pdf", True
Me.Filter = currentFilter
Me.FilterOn = currentFilterOn
例如,如果该按钮位于表单上,而您只想打印有关报告,则可以在此按钮中使用以下代码:
Const REPORT_NAME As String = "Case Details"
Dim condition As String
'If field type of ID is a number use this:
condition = "[ID] = " & Me.ID
'If field type of ID is a string use this:
'condition = "[ID] = '" Me.ID & "'"
DoCmd.OpenReport REPORT_NAME, acViewPreview, , condition, acHidden
'You would have to provide txtPDFRef in another way, because the report isn't open yet.
DoCmd.OutputTo acOutputReport, REPORT_NAME, acFormatPDF, "G:\Police\Restricted\Saved Reports\ " & Me.txtPDFRef & ".pdf", True
DoCmd.Close acReport, REPORT_NAME
保存为pdf后关闭报告。请注意,您可能必须以其他方式提供txtPDFRef
。但是也许它也以相同的名称存在于表单中,这将使其立即运行。
答案 1 :(得分:0)
最简单的解决方案:
选项1
使用筛选器在预览中打开报表,然后使用outputTo without ObjectName参数。
docmd.openReport "Case Details",,"id = " & id
docmd.outputTo objectType:=acOutputReport, outputFormat:=acFormatPDF, outputFile:= somefileName
docmd.close acOutputReport, "Case Details"
选项2 (甚至更简单)
在设计视图中,更改报表的filter
属性以引用调用表单中的控件。
像id = forms!someForm.idControl