首页 > 解决方案 > 如何在 MS Access 报表宏中使用 VBA 更改记录源

问题描述

全部,

在 MS Access 2010 中,我有一个链接到报告的表(Today's Settled Jrnls)。我运行下面的 VBA 代码将报告导出为共享驱动器上的 pdf。

Public Function exporttopdf()

Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim MyFileName As String
Dim mypath As String
Dim temp As String

mypath = "S:\Dan\" & Format(Date, "mm-dd-yyyy") & "\"

If Dir(mypath, vbDirectory) = "" Then MkDir mypath

Set db = CurrentDb()

Set rs = CurrentDb.OpenRecordset("SELECT distinct [Settlement No] FROM [Today's Settled Jrnls]", dbOpenDynaset)

Do While Not rs.EOF

temp = rs("[Settlement No]")
MyFileName = rs("[Settlement No]") & ".PDF"



DoCmd.OpenReport "Settlement Report", acViewReport, , "[Settlement No]='" & temp & "'"
DoCmd.OutputTo acOutputReport, "", acFormatPDF, mypath & MyFileName
DoCmd.Close acReport, "Settlement Report"
rs.MoveNext

Loop

Set rs = Nothing
Set db = Nothing

End Function

这可行,但我想将 [Today's Settled Jrnls] 表更改为不同的表 [New Jrnls]。新表具有完全相同的列和设置。但是,当我在上面的 select 语句中更改表时,代码运行但报告为空白。我认为这是因为报告(结算报告)仍然链接到旧表。您知道如何使用 VBA 将报告链接到新表吗?

标签: ms-accessvbams-access-2010

解决方案


只需RecordSource在第一次打开报告后添加一个指向新表的调用:

' OPEN REPORT
DoCmd.OpenReport "Settlement Report", acViewReport
' ADJUST SOURCE
Reports![Settlement Report].Report.RecordSource = "SELECT * FROM [New Jrnls]"

' FILTER AND OUTPUT
DoCmd.OpenReport "Settlement Report", acViewReport, , "[Settlement No]='" & temp & "'"
DoCmd.OutputTo acOutputReport, "", acFormatPDF, mypath & MyFileName
DoCmd.Close acReport, "Settlement Report"

推荐阅读