需要帮助获取报告以在Access中正确循环

时间:2014-08-14 11:52:01

标签: vba ms-access

我有一个包含五个表(LDAP_Users,USERS,Courts Users,Accounts和Supervisors)的数据库,这些表都通过LDAP表中的用户名链接。我创建了一个查询,从五个表中检索10个字段。我还创建了一个表单来显示这十个字段。表格的结构是Supervisor是一个组,其下是主管的姓名,电子邮件和电话号码,然后是受监管的用户,用户可以访问的帐户以及帐户访问的类型。

我有以下代码,我的最终状态是让数据库迭代每个主管并检索他们作为报告的一部分监督的用户。将文件保存到我的网络驱动器,最终获取电子邮件变量,并通过电子邮件将特定报告发送给主管。

问题是,第一个报告保存到网络,但第二个由31个页面组成的页面继续循环,并且不会移动到下一个主管。至于电子邮件,我得到了迭代的一部分,我转到了电子邮件。

我对VBA很新,非常感谢温和的帮助。

Private Sub CreateReports_Click()
    Dim x As String
    Dim y As String
    Dim StrSQL
    Dim stWhereStr As String 'Where Condition'
    Dim stSection As String 'Selection from drop down list
    Dim stfile As String

    StrSQL = "SELECT distinct [Sup] " & _
             "FROM ([OPDA ISSR - FedInvest Users by Account/Sup])"

    y = Year(date)
    Set rst = CurrentDb.OpenRecordset("OPDA ISSR - FedInvest Users by Account/Sup")

    If rst.EOF And rst.BOF Then
        MsgBox "No data available for the Ledger Process routine."
    Else
        rst.MoveFirst
        Do While Not rst.EOF
            x = rst![Sup]
            stDocName = "FedInvest - ISSR Recertification Report"
            stWhereStr = "[OPDA ISSR - FedInvest Users by Account/Sup].[SUP]= '" & x & "'"
            stfile = "MYNETWORKDRIVE" & x & " - " & y & " FedInvest InvestOne Recertification.pdf"

            DoCmd.OpenReport stDocName, acPreview, , stWhereStr
            DoCmd.OutputTo acOutputReport, stDocName, acFormatPDF, stfile
            DoCmd.Close acReport, stDocName
            rst.MoveNext
        Loop
    End If
    rst.Close
    Set rst = Nothing
End Sub

1 个答案:

答案 0 :(得分:0)

虽然您创建了一个由主管过滤的SQL字符串,但您打开的是整个表的记录。使用querydef过滤主管,如下所示:

替换

Set rst = CurrentDb.OpenRecordset("OPDA ISSR - FedInvest Users by Account/Sup")

使用

Dim db as DAO.Database
Dim rst = DAO.Recordset
Set db = CurrentDb
Dim qdTemp as DAO.QueryDef
Set qdTemp = db.CreateQueryDef("", StrSQL)
Set rs = qdTemp.OpenRecordSet()