-3

我正在 MS Access 中开发一个报告,该报告会提取员工列表。它会生成一个每日签到表,然后将其发布到每个部门。

我想打开报告,询问“开始日期”,然后在接下来的 7 天内打印该报告,将每个副本的“开始日期”参数增加 1。(开始日期不存储在数据库中,它只是一个用于在报告上打印的输入参数)

报告按部门分组,每个部门打印在新页面上(组标题部分具有“强制新页面”设置“部分之前”)。

我假设这一切都需要在 VBA 中从打开报告的命令按钮的 Click() 事件的 while 循环中完成,但我在这里不合群。知道如何做到这一点吗?

4

1 回答 1

1

我这样做的方法是:

  • 创建一个表(称为tblReportDate)以将日期存储在名为ReportDate;的字段中。
  • 创建一个小表单,其中包含一个名为的文本框,该文本框txtReportDate具有适合日期的输入掩码;
  • 在报表中添加一个文本框,并将 controlsource 设置为=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用作名称的一部分,而不是我正在使用的循环计数器。

问候,

于 2021-03-05T17:04:11.967 回答