我正在使用以下命令通过Outlook从MS Access发送电子邮件
DoCmd.SendObject acSendReport, report_name, acFormatPDF, my_email, , my_email, "Weekly", "Sending you weekly report", True
其中report_name是基于查询qQuickReport的报告。
但是我不想将所有记录发送给所有收件人。每个收件人应从报告中收到自己的记录。创建此表的基础是创建5个单独的查询和5个表单,这是一种选择,但我宁愿“适当地”进行。因此,我计划在查询qQuickReport中循环收件人ID,并添加以下条件:
WHERE (((qALL.Koordinator)=[whichone]))
并通过VBA代码如下设置参数[whereone]:
DoCmd.SetParameter "whichone", "4"
如果仅打开查询qQuickReport,以下两行工作正常,它仅包含属于收件人4的记录:
DoCmd.SetParameter "whichone", "4"
DoCmd.OpenQuery ("qQuickReport")
但是如果我尝试如下使用它:
DoCmd.SetParameter "whichone", "4"
DoCmd.SendObject acSendReport, report_name, acFormatPDF, my_email, , my_email, "Weekly", "Sending you weekly report", True
它要求我以交互方式输入参数[哪个](在窗口中输入参数值),因此这意味着报表下的查询未接收到参数[哪个]的值。
我做错什么了吗?还是不支持使用SendReport设置参数?
谢谢PH
答案 0 :(得分:0)
根据docs中的规定,DoCmd.SetParameter
仅适用于BrowseTo
,OpenForm
,OpenQuery
,OpenReport
或{{1 }}。 RunDataMacro
解决此问题的唯一真正方法是不使用参数。例如,您可以将参数替换为SendObject
,以允许在代码中进行设置。
答案 1 :(得分:0)
我看到了这一点,并认为也许有人会受益于没有setparameter方法来解决此问题的方式如何工作。
有一个名为tblsupplierCl的表和一个名为rptsupplier的报告
这可以通过将报告SupplierNbr设置为等于记录集循环中的迭代记录(SupplierNbr =“&rs!SupplierNbr)来工作。它避免了OP的问题。
它仅向每个供应商邮寄他们应该看到的物品。
msgbody1 = "255 characters" 'each message body is limited to 255
'characters. You can use multiple message bodies to get around that!
Set rs = CurrentDb.OpenRecordset ("SELECT distinct supplierNbr, supplieremail " & _
"suppliertext FROM tblsupplierCl")
If Not rs.EOF Then
rs.MoveFirst
Do
DoCmd.OpenReport "rptsupplier", acViewPreview, , _
"SupplierNbr = " & rs!SupplierNbr, acHidden
DoCmd.SendObject acSendReport, "rptsupplier", _
acFormatPDF, rs!Supplieremail, , , msgtitle, msgbody1, False
DoEvents
DoCmd.Close acReport, "rptsupplier", acSaveNo
rs.MoveNext
Loop While Not rs.EOF
End If
我是新来的,所以如果发布这违反了我的道歉规则
标记