通过查询帮助访问VBA循环

时间:2011-04-21 16:59:19

标签: ms-access vba loops

我有一个表单(Cobind_frmMain),允许用户创建附加到它的标题池。因此,有一个顶级池名称(TopLvlPoolName),在子表单上,标题被添加到它。我需要的是为每个标题发布一份报告。我有所有设置的报告和查询。现在,报告将在一个文件中显示所有标题。标题位于名为“CatCode”的字段中。

我需要的是以下内容:
1.将每个标题保存为PDF并保存到我们的服务器 2.打开电子邮件并附上PDF 3.重复,直到完成所有标题。

编辑:这是我到目前为止的代码,我仍然得到的错误信息是:Set Recordset行上的“Too Few Parameters”。我正在尝试在strSQL行中设置参数。我希望PartPoolName(在Cobind_qryReport中,一个查询)等于打开表单上的TopLvlPoolName。下面列出了Cobind_qryReport的SQL:

Private Sub btn_Run_Click()
Dim db As DAO.Database  
Dim rs As DAO.Recordset  
Dim strSQL As String  
Set db = CurrentDb  

strSQL = "Select * FROM Cobind_qryReport WHERE PartPoolName = " & Me.TopLvlPoolName

Set rs = db.OpenRecordset(strSQL)

On Error GoTo Err_PO_Click

If MsgBox("Do you wish to issue the cobind invites?", vbYesNo + vbQuestion, "Confirmation Required") = vbYes Then

 rs.MoveFirst

  Do While Recordset.EOF = False

    DoCmd.OutputTo acOutputReport, "Cobind_rptMain", acFormatPDF, "K:\OB MS Admin\Postage\CoBind Opportunities\Sent Invites\" & [CatCode] & "_" & [PartPoolName] & "Cobind Invite_" & Format(Now(), "mmddyy") & ".pdf"

    DoCmd.SendObject acSendReport, "Cobind_rptMain", acFormatPDF, , , , [CatCode] & "_" & [PartPoolName] & " Cobind Invite", "Please find the cobind invite attached. Response is needed by " & [RSVP] & ". Thank you.", True

    Recordset.MoveNext

  Loop

End If


Exit_PO_Click:
    MsgBox ("It didn't work")
    Exit Sub

Err_PO_Click:
    MsgBox Err.Description
    Resume Exit_PO_Click
End Sub

Cobind_qryReport SQL:
SELECT tblEvents.EventTitle,Cobind_tblPartic.CatCode,Cobind_tblPartic.CodeQty,Cobind_tblPartic.PartPoolName,Cobind_tblTopLvl.RSVP,Cobind_tblPartic.ID FROM Cobind_tblTopLvl,Cobind_tblPartic INNER JOIN tblEvents ON Cobind_tblPartic.CatCode = tblEvents.EventCode GROUP BY tblEvents.EventTitle,Cobind_tblPartic.CatCode,Cobind_tblPartic.CodeQty,Cobind_tblPartic.PartPoolName,Cobind_tblTopLvl.RSVP,Cobind_tblPartic.ID ORDER BY Cobind_tblPartic.ID;

再次感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您的查询Cobind_qryReport有一个您需要设置的参数。如果您想知道参数名称,请尝试以下代码

   Dim qdf As QueryDef
   Set qdf = CurrentDb.QueryDefs("Cobind_qryReport")

    If qdf.Parameters.Count > 0 Then
        MsgBox (qdf.Parameters(0).Name)
    End If

<强>更新 既然你知道你有一个参数select * from Cobind_qryReport,那么设置参数可能会更容易,然后使用qdf打开记录集,例如。

   Dim rs as DAO.Recordset
   Dim qdf As QueryDef
   Set qdf = CurrentDb.QueryDefs("Cobind_qryReport")

   qdf.Parameters(0).Value = 7832
   Set foo = qdf.OpenRecordset()

注意:设置参数值

时,可以在序号的位置使用参数名称

e.g。 qdf.Parameters("Foo").value = 7832