问题描述
我正在 MS Access 中开发一份报告,用于提取员工列表。它会生成每日签到表,然后在每个部门发布。
我想打开报告,询问“开始日期”,然后打印接下来 7 天的报告,在每份副本上将“开始日期”参数增加 1。 (开始日期不存储在数据库中,它只是用于打印在报告上的输入参数)
报告按部门分组,每个部门打印在一个新页面上(组标题部分将“强制新建页面”设置为“前部分”)。
我假设这一切都需要在 VBA 中从打开报告的命令按钮的 Click() 事件的 while 循环中完成,但我在这里不合时宜。知道如何做到这一点吗?
解决方法
我这样做的方式是:
- 创建一个表(名为
tblReportDate
)以将日期存储在名为ReportDate
的字段中; - 创建一个小表单,其中包含一个名为
txtReportDate
的文本框,其中包含适合日期的输入掩码; - 在报表中添加一个文本框,并设置控件源为
=DLookUp("ReportDate","tblReportDate")
; - 向表单添加命令按钮,并在其
OnClick
事件中包含以下代码:
Private Sub cmdPrint_Click()
On Error GoTo E_Handle
Dim intLoop1 As Integer
For intLoop1 = 0 To 6
CurrentDb.Execute "DELETE * FROM tblReportDate;"
CurrentDb.Execute "INSERT INTO tblReportDate (ReportDate) SELECT " & Format(DateAdd("d",intLoop1,Me!txtReportDate),"\#mm\/dd\/yyyy\#") & ";"
DoCmd.OpenReport "rptReport",acViewPreview
DoCmd.OutputTo acOutputReport,"rptReport",acFormatPDF,"C:\test\report-" & intLoop1 + 1 & ".pdf"
DoCmd.Close acReport,"rptReport"
Next intLoop1
sExit:
On Error Resume Next
Exit Sub
E_Handle:
MsgBox Err.Description & vbCrLf & vbCrLf & "frmReport!cmdPrint_Click",vbOKOnly + vbCritical,"Error: " & Err.Number
Resume sExit
End Sub
我更喜欢使用小表格而不是内置的 InputBox
,因为您可以使用输入掩码来输入日期。
在本例中,我只是在关闭报告之前将报告输出为 PDF。您可能希望使用 DLookup
作为名称的一部分,而不是我使用的循环计数器。
问候,