I have a form that contains multiple partners that share a “pool”. The partners are listed on a subform. After I’m done entering the information, I want a button to run a report for each of the partners with their specific information. But since it’s multiple partners and I need one report for each (which I then want to email), I want to use a Loop to go through each of the partners.
EDIT1: Added entire code for review. I do have Option Explicit in and I have compiled it as well.
Private Sub btn_Run_Click()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim strSQL As String
strSQL = "Select * FROM Cobind_qryReport WHERE PartPoolName = """ & Me.TopLvlPoolName & """"
Debug.Print "strSQL: " & strSQL
Set db = CurrentDb
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 rs.EOF = False
DoCmd.OutputTo acOutputReport, "Cobind_rptMain", acFormatPDF,_
"K:\OB MS Admin\Postage\CoBind Opportunities\Sent Invites\" _
& rs!CatCode & "_" & rs!PartPoolName "Cobind Invite_" & _
Format(Now(), "mmddyy") & ".pdf"
DoCmd.SendObject acSendReport, "Cobind_rptMain", acFormatPDF, ,_
, , " Cobind Invite", "Please find the cobind invite attached._
Response is needed by " & [RSVP] & ". Thank you.", True
rs.MoveNext
Loop
End If
Exit_PO_Click:
MsgBox ("It didn't work")
rs.Close
Set rs = Nothing
Set db = Nothing
Exit Sub
Err_PO_Click:
MsgBox Err.Description
Resume Exit_PO_Click
End Sub
This should allow me to create a report for each record in my query, save it to my server, then open an email to send it out. Right now, it appears that the [PartPoolName] is hanging up the code because I’m getting a “Microsoft Office Access can’t find the field “|” referred to in your expression.” If I take out the [PartPoolName], it’ll create a PDF with four pages (each page showing a partner), where I want to end up with four separate PDFs.
The first thing you should do is add Option Explicit to the Declarations section of your module.
Then, from the Visual Basic editor’s main menu, select Debug->Compile [your project name here]
Fix all the problems the compiler complains about. I suspect one of the compiler’s first complaints may be triggered by this section of your code:
Do you have two recordset objects open, or one?
After you fix everything the compiler complains about, try your revised code.
If you get runtime errors, show us the exact error message and which code line is highlighted.
If the part of your code you haven’t shown us includes an error hander, you can disable that error handler like so:
Error handlers are great for production to shield users from errors. However, during development you really need to be able to identify which code line causes the error.
Alternatively, you can leave your error handler active and select Tools->Options from the editor’s main menu. In the Options dialog, select the General tab, then select the “Break on All Errors” radio button and click OK. You can switch that option back to “Break on Unhandled Errors” after you finish your testing.
Update: You wrote: Right now, it appears that the [PartPoolName] is hanging up the code because I’m getting a “Microsoft Office Access can’t find the field “|” referred to in your expression.”
What is [PartPoolName]? If it’s a field in the recordset, you can reference its value as
rs!PartPoolNameIf it’s something else, perhaps a global variable, give us more information about it.Update2: Whenever your current code completes without error, you will hit this:
Can that be right?
Update3: This OutputTo statement is your issue now, right?
Cobind_rptMain is a report. It has a RowSource for its data. You’re calling OutputTo with that report 4 times (once for each of the 4 rows in the recordset). Yet you expect 4 different versions of that report … a separate report for each PartPoolName value?