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

Posted

技术标签:

【中文标题】MS 访问 DoCmd.SendObject acSendReport 报告的条件内容【英文标题】:MS access conditional content of report for DoCmd.SendObject acSendReport 【发布时间】:2019-02-11 11:07:42 【问题描述】:

我正在使用以下命令通过 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代码设置参数[whichone]如下:

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

它要求我交互式输入参数[whichone](窗口输入参数值),所以这意味着Report下的查询没有收到参数[which]的值。

我做错了什么还是不支持使用 SendReport 设置参数?

谢谢,PH

【问题讨论】:

【参考方案1】:

我看到了这一点,并认为如果没有 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

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

标记

【讨论】:

【参考方案2】:

如docs 中所述,DoCmd.SetParameter 仅适用于BrowseToOpenFormOpenQueryOpenReportRunDataMacroSendObject 不支持它

解决此问题的唯一真正方法是不使用参数。例如,您可以将参数替换为 TempVar,以允许在代码中进行设置。

【讨论】:

Erik,你是个好人,TempVar 解决了我的痛苦,非常感谢。 PH值。

以上是关于MS 访问 DoCmd.SendObject acSendReport 报告的条件内容的主要内容,如果未能解决你的问题,请参考以下文章

集训队日常训练20181110 DIV210 题解及AC代码

codevs 3119 高精度练习之大整数开根 (各种高精+压位)

今年暑假不AC

hdu 1570 AC

POJ 2229 Sumsets

AC日记——Dividing poj 1014