我正在尝试为我正在为我所工作的公司开发的系统学习vba。然而,它是一个陡峭的学习曲线。具体来说,我希望自动化一系列MS Access 2013报告,而不是每次要发送时都为报告输入新的id#。
我可以通过查询提取所有id #I需要报告的列表,但我想知道是否有某种方法让vba顺序遍历每条记录,将id#分配给变量(和/或将其置于当前控制报告的形式的未绑定控件中,然后生成报告的pdf(最终我也想自动通过电子邮件发送报告。
真的,这对我来说很重要,但如果成功的话,它可以在将来节省无数个小时。到目前为止,我所能做的只是从vba打印到pdf的报告,但我必须将数据输入到表单中,这不会随时节省。
任何想法都会很棒。我对vba很新。
感谢。
答案 0 :(得分:2)
网上应该有大量DAO
Database.Openrecordset()
和Recordset.Movenext
循环的代码示例。
尝试在数据库模块头中创建全局IDNo
变量(Public
或Friend
变量)和数据库模块中的ID()
函数,该函数返回值IDNo变量,并在报告的查询中使用该函数来过滤记录。
对于Recordset
的每个循环,将相应的数据分配给IDNo
全局变量,然后执行DoCmd.OpenReport
。
您应该为record
中的每个recordset
收到一份报告,并根据ID进行过滤。
答案 1 :(得分:0)
Dim db as Database
Dim rec1 as Recordset
Dim rec2 as Recordset
Set db = CurrentDB
set rec1 = db.OpenRecordset ("Select IDNum from TableWithIDs")
Do While rec1.EOF = False
set rec2 = db.OpenRecordset("Select * from ReportTable Where IDNum = " & rec1(0) & "")
... Process report based on the query results of rec2
set rec2 = nothing
rec1.MoveNext
Loop