MS访问DoCmd.SendObject acSendReport的报告的条件内容

时间:2019-02-11 11:07:42

标签: vba ms-access

我正在使用以下命令通过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

2 个答案:

答案 0 :(得分:0)

根据docs中的规定,DoCmd.SetParameter仅适用于BrowseToOpenFormOpenQueryOpenReport或{{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

我是新来的,所以如果发布这违反了我的道歉规则

标记