2011-04-21 50 views
1

我有一個表單(Cobind_frmMain),它允許用戶創建一個連接到它的標題池。因此,有一個頂級池名稱(TopLvlPoolName),並在子窗體上添加標題。我需要的是爲每個標題發佈報告。我有所有設置的報告和查詢。現在,報告將在一個文件中顯示所有標題。這些標題位於名爲「CatCode」的字段中。通過查詢幫助訪問VBA循環

我需要的是以下內容:
1.將每個標題保存爲PDF並將其保存到我們的服務器。
2.打開電子郵件並附上PDF。
3.重複,直到所有標題完成。

編輯:這是我到目前爲止的代碼和我仍然得到的錯誤消息是:「設置記錄集行」上的「太少參數」。我試圖在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

請確定並指定您的Dim語句的類型。它會爲你節省心痛和跑步時間。 – 2011-04-21 17:12:59

+0

對不起 - 我不明白Option Explicit。我究竟會在哪裏放? – 2011-04-21 18:39:31

回答

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() 

注意:您可以在序的地方設置的parameterValue時使用的參數名稱

例如qdf.Parameters("Foo").value = 7832

+0

+1如果查詢包含多個參數,則可能會更好,因爲'qdf.Parameters.Count> 0' ... ...。 – HansUp 2011-04-21 19:11:35

+0

好吧,所以我知道我有一個參數。你是說它拋棄了Recordset嗎? – 2011-04-21 19:15:49

+1

@HansUp,你當然是對的(更新我的答案),但我們知道它恰好是一個,因爲錯誤說「參數太少,期望1」 – 2011-04-21 19:16:14