MS Access使用ID将记录另存为PDF

时间:2018-11-09 01:13:02

标签: vba ms-access

我的组织使用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")

2 个答案:

答案 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