我有一个包含多个共享“池”的合作伙伴的表单。合作伙伴列在子表单中。输入完信息后,我想要一个按钮,为每个合作伙伴提供具体信息的报告。但由于它是多个合作伙伴,我需要为每个合作伙伴提供一份报告(然后我想发送电子邮件),我想使用循环来浏览每个合作伙伴。
EDIT1:添加了整个代码供审核。我确实有Option Explicit,我也编译了它。
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
这应该允许我为查询中的每条记录创建一个报告,将其保存到我的服务器,然后打开一封电子邮件将其发送出去。现在,似乎[PartPoolName]挂起了代码,因为我得到的是“Microsoft Office Access无法找到表达式中引用的字段”。如果我取出[PartPoolName],它将创建一个包含四个页面的PDF(每个页面显示一个合作伙伴),我想最终得到四个单独的PDF。
答案 0 :(得分:2)
您应该做的第一件事是将 Option Explicit 添加到模块的声明部分。
然后,从Visual Basic编辑器的主菜单中选择 Debug->编译[此处的项目名称]
修复编译器抱怨的所有问题。我怀疑编译器的第一个投诉之一可能是由您的代码的这一部分触发的:
rs.MoveFirst
Do While Recordset.EOF = False
您是打开了两个记录集对象还是一个?
修复编译器抱怨的所有内容后,请尝试修改后的代码。
如果您遇到运行时错误,请向我们显示确切的错误消息以及突出显示的代码行。
如果您未向我们展示的代码部分包含错误处理程序,您可以像这样禁用该错误处理程序:
'On Error GoTo Err_PO_Click
错误处理程序非常适合生产以保护用户免受错误的影响。但是,在开发过程中,您确实需要能够识别哪个代码行导致错误。
或者,您可以让错误处理程序处于活动状态,然后从编辑器的主菜单中选择工具 - >选项。在“选项”对话框中,选择“常规”选项卡,然后选择“中断所有错误”单选按钮,然后单击“确定”。完成测试后,您可以将该选项切换回“打破未处理的错误”。
更新:您写道:现在,似乎[PartPoolName]挂起代码,因为我收到“Microsoft Office Access无法找到该字段” |“在你的表达中提到。”
什么是[PartPoolName]?如果它是记录集中的一个字段,您可以将其值引用为rs!PartPoolName
如果它是其他内容,也许是全局变量,请提供有关它的更多信息。
Update2 :每当您的当前代码完成且没有错误时,您都会看到:
Exit_PO_Click:
MsgBox ("It didn't work")
那可能是对的吗?
Update3 :此OutputTo语句现在是您的问题,对吗?
DoCmd.OutputTo acOutputReport, "Cobind_rptMain", acFormatPDF,_
"K:\OB MS Admin\Postage\CoBind Opportunities\Sent Invites\" & _
"Cobind Invite_" & Format(Now(), "mmddyy") & ".pdf"
Cobind_rptMain是一份报告。它的数据有一个RowSource。您使用该报告调用OutputTo 4次(对于记录集中的4行中的每一行一次)。然而,您期望该报告的4个不同版本...每个PartPoolName值的单独报告?
答案 1 :(得分:1)
要完成HansUp的精彩工作,请访问有关如何为单个记录打印报告以及如何生成附加到电子邮件的报告的页面。请参阅Emailing reports as attachments from Microsoft Access页面。