【问题标题】:Using MS Access Macro or VBA loop to print individual reports使用 MS Access 宏或 VBA 循环打印单个报告
【发布时间】:2015-12-14 23:38:38
【问题描述】:

我对 VBA 脚本一点也不熟悉,但我尝试了一些在这里和网上其他地方找到的脚本,但运气不佳。

目前我有一个表单,用户可以在其中按下“导出报告”命令按钮,该按钮会打开一个提示,要求输入 [AgencyID](一个 5 位数的 ID 号)。一旦用户输入 [AgencyID],就会启动报告“rptAgencyReport”,它使用标准“Like [AgencyID]”显示来自查询“qryAgencyReport”的信息,以在打印友好的视图中从许多表中查询字段。用户可以从这里打印报告或将其保存为 pdf 或 rtf。

我的问题是,如果我们要将所有文件的副本导出为 .rtf 格式,我们必须手动选择“导出报告”按钮,输入 [AgencyID],然后保存输出的文件。对于 600-700 份单独的报告,这需要几天时间才能完成。

我想做的不是手动输入 [AgencyID] 并运行每个报告,而是使用 [AgencyID] 作为文件名将这些报告批量导出到 .rtf 文件。我有一个查询“exportAgencyID”,其中包含我需要运行的所有 [AgencyID] 的列表,但我还没有找到将 [AgencyID] 作为变量传递给报告和查询的方法。

我查看了https://support.microsoft.com/en-us/kb/209790,但我不知道如何从查询“exportAgencyID”中获取每条记录并将其用作查询“qyrAgencyReport”所需的输入。

查询“exportAgencyID”

[AgencyID]
3
36
162
194
1190
1345
. . .

查询“qryAgencyReport”

Field: AgencyID
Table: AgencyMaster
Sort: 
Show: checked
Criteria: Like [AgencyID]

tldr;报告以可打印的形式显示查询结果;查询结果基于用户输入的 [AgencyID]。如何从包含所有 [AgencyID] 的表或查询中自动设置 [AgencyID] 输入,并为每个 [AgencyID] 导出名为 [AgencyID].rtf 的记录?

谁能帮助非营利组织节省几天的重复性工作?

【问题讨论】:

  • 我在mrexcel.com/forum/microsoft-access/… 找到了这段代码,可以满足我的大部分需求。我挂断了“Me.cbo”。由于我没有使用组合框,我用什么替换它?关闭 Me.cbo 会导致挂起。

标签: ms-access vba ms-access-2010


【解决方案1】:

这个问题有点模棱两可,但我创建了一个简单的函数,可能会对您有所帮助

 Public Sub GetAgencyID()
 Dim rst As Recordset
 Dim db As Database
 Dim strSQL As String

 set db = CurrentDb


 strSQL = "SELECT exportAgencyID.AgencyID FROM exportAgencyID ORDER BY exportAgencyID"

  set rst = db.OpenRecordset(strSQL)

 rst.MoveFirst

 Do Until rst.EOF
 DoCmd.OpenReport "rptAgencyReport", acViewPreview, , "AgencyID = " & rst!AgencyID
 DoCmd.OutputTo acOutputReport, "rptAgencyReport", acFormatRTF, "C:\ReportsFromAccess\AgencyID." & rst!AgencyID & ".rtf"
docmd.close acReport, "rptAgencyReport"
rst.MoveNext
loop

rst.close
set rst = nothing
strSQL = ""
End Sub

C:\ReportsFromAccess 要求您在 C:\ 驱动器中有一个名为 ReportsFromAccess 的文件夹。您可以对其进行编辑以将其保存到需要保存的位置。当 AgencyID =1 时,它应该创建一个类似 AGencyID1.rtf 的文件

【讨论】:

  • 在上面的代码中我需要添加 Set db = CurrentDb Set rst = db.OpenRecordset("SELECT [AgencyID] FROM [export-agency-list]", dbOpenDynaset)
  • 谢谢,我一定是不小心错过了那部分。请注意,由于已经使用您询问的查询声明了 strSQL,因此代码可以简单地为 db.OpenRecordset(strSQL)
【解决方案2】:

感谢@juan-castiblanco 提供代码。我需要进行一些调整才能使其正常工作。下面是工作代码。

Private Sub GetAgencyID()
 Dim rst As Recordset
 Dim db As Database
 Dim strSQL As String

 Set db = CurrentDb()

 Set rst = db.OpenRecordset("SELECT [AgencyID] FROM [exportAgencyID]")

rst.MoveFirst

Do Until rst.EOF
  DoCmd.OpenReport "rptAgencyReport", acViewPreview, , "AgencyID = " & rst!AgencyID
  DoCmd.OutputTo acOutputReport, "rptAgencyReport", acFormatRTF, "C:\Provider Profiles 2016\" & rst!AgencyID & ".rtf"
  DoCmd.Close acReport, "rptAgencyReport"
  rst.MoveNext
Loop

rst.Close
Set rst = Nothing
strSQL = ""
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-20
    • 2011-04-28
    • 2011-01-05
    • 1970-01-01
    • 2023-03-20
    • 2018-12-21
    相关资源
    最近更新 更多