【问题标题】:MS access conditional content of report for DoCmd.SendObject acSendReportMS 访问 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

【问题讨论】:

    标签: vba ms-access


    【解决方案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 仅适用于BrowseTo、OpenForm、OpenQuery、OpenReport 或RunDataMacro。 SendObject 不支持它

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

      【讨论】:

      • Erik,你是个好人,TempVar 解决了我的痛苦,非常感谢。 PH值。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多