Access 2007如何使用VBA循环查询并循环打印报告

时间:2010-10-21 15:01:08

标签: access-vba

我有一个现有模块,它通过循环浏览另一个表(School_room_grade),根据查询(CAP教室报告gr 5)打印一系列报告。报告是根据模块中与School_room_grade表中的行匹配的WhereCondition打印的。使用此过程,以便每个school_room_grade组合将所有报告放在一起,并且不需要使用报告。

其中一个报告(CAP Math Gr 5)已被修改,现在包含7个链接的子报告,这些报告使得该过程变慢。每个子报表都基于相同的查询,但使用不同的字段进行排序。我认为最好取消链接子报告并将查询限制在一次只有一个school_room_grade组合。当我第一次在没有链接子报表的情况下编写报表时,它似乎运行得更快。但是,当它没有链接时,报告的排序不起作用。

我在想我应该在外面用查询创建一个嵌套循环,然后循环打印报告。你认为这会提高速度吗?

以下是在添加链接报告之前工作的原始报告打印代码。

Option Compare Database

'------------------------------------------------------------
' Print Grade 5 & 6 CAP homeroom reports
'
'------------------------------------------------------------
Sub PrintReports()

    Dim rs As DAO.Recordset
    Dim rptArr As Variant
    Dim rpt As Long

    rptArr = Array("CAP MATH GR 5", "CAP ELA GR 5")

    Set rs = CurrentDb.OpenRecordset("school_room_query_table_5")

    With rs
        .MoveFirst
        Do While Not .EOF
            For rpt = LBound(rptArr) To UBound(rptArr)
                DoCmd.OpenReport ReportName:=rptArr(rpt), View:=acViewNormal, _
                    WhereCondition:="[school_room_grade] = '" & rs!school_room_grade & "'"
            Next
            .MoveNext
        Loop
        .Close
    End With

    MsgBox "Done"

End Sub

所有报告所依据的查询:[cap classroom report gr 5] - 条件字段为[school_room_grade]。 用于循环的表是[school_room_query_table_5],匹配字段是[school_room_grade]

我从未在命名查询中完成循环 - 它可以完成吗?

1 个答案:

答案 0 :(得分:1)

Dim db as Database
Dim rs as RecordSet

Set db = DAO.OpenDatabase("Database path")
Set rs = db.OpenRecordSet("Query name")

For i = 0 To rs.QueryDefs.Count - 1

     rs.QueryDefs.Name

next i

这样的事情应该可以遍历所有查询定义名称的名称。