2011-04-21 4 views
1

У меня есть форма (Cobind_frmMain), которая позволяет пользователю создавать пул названий, прикрепленных к нему. Таким образом, есть имя пула верхнего уровня (TopLvlPoolName) и на подформе, названия добавляются к нему. Мне нужно выпустить отчет для каждого из названий. У меня есть отчет и все запросы настроены. Прямо сейчас в отчете будут показаны все заголовки в одном файле. Заголовки находятся в поле под названием «CatCode».Доступ к VBA Loop через подсказку

Мне нужно следующее:
1. Сохраните каждый заголовок в формате PDF и сохраните его на нашем сервере.
2. Откройте электронную почту и приложите PDF.
3. Повторяйте до тех пор, пока все заголовки не будут выполнены.

EDIT: Это то, что у меня есть для кода, и сообщение об ошибке, которое я до сих пор получаю, это: «Слишком мало параметров» в строке Set Recordset. Я пытаюсь установить параметр в строке strSQL. Я хочу, чтобы PartPoolName (в Cobind_qryReport, запрос) равнялось TopLvlPoolName в открытой форме. SQL для Cobind_qryReport приведена ниже:

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:
ВЫБОР tblEvents.EventTitle, Cobind_tblPartic.CatCode, Cobind_tblPartic.CodeQty, Cobind_tblPartic.PartPoolName, Cobind_tblTopLvl.RSVP, Cobind_tblPartic.ID ОТ Cobind_tblTopLvl, Cobind_tblPartic INNER РЕГИСТРИРУЙТЕСЬ tblEvents ПО 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. Это сэкономит вам душевную боль и время работы. –

+0

Извините - я не понимаю Option Explicit. Где бы я это сказал? –

ответ

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 

Update Так как вы знаете, у вас есть параметр делает select * from Cobind_qryReport это может быть просто проще установить параметр, а затем использовать ФРК, чтобы открыть например, набор записей

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

+0

ОК, поэтому я знаю, что у меня есть параметр. Вы говорите, что это отбрасывает Recordset? –

+1

@ HansUp, вы правы, конечно (обновленный мой ответ), но мы знаем его точно одно, потому что ошибка говорит «Слишком мало параметров. Ожидаемое 1» –

Смежные вопросы