【问题标题】:Email an Access 2007 report automatically every night with no user action每晚自动通过电子邮件发送 Access 2007 报告,无需用户操作
【发布时间】:2014-08-27 10:59:12
【问题描述】:

我在 MS Access 2007 中有一份报告,我想每晚自动将此报告作为 pdf 发送,而不要求用户手动运行宏。我在宏中有以下代码:

    Dim strRecipient As String
    Dim strSubject As String
    Dim strMessageBody As String

    strRecipient = "emailaddr...@domain.com"
    strSubject = "This is the email subject"
    strMessageBody = "Here is a whole bunch of interesting text to accompany the   attachment."

    DoCmd.SendObject acSendReport, "rptNameofReport", acFormatPDF, strRecipient, , ,  strSubject, strMessageBody, False 

在谷歌中,它说我可以将此宏命名为 autoexec 并使用 Windows 任务调度程序。但是,这在我的情况下不起作用,因为当我运行上面的代码时,我从 Outlook 收到一条安全警告消息,说“程序正在尝试代表您自动发送电子邮件 你想允许吗?如果这是意外情况,则可能是病毒,您应该选择“否”

我不希望显示此消息,因为我不希望用户确认,因为计划是在晚上自动发送此电子邮件。任何帮助将不胜感激! 提前致谢,

【问题讨论】:

    标签: ms-access


    【解决方案1】:

    到目前为止,我发现这样做的唯一方法是在用户 PC 上的 MS Outlook 版本上进行更改,以允许绕过,因为错误是附加的并通过 Outlook 运行,而不是 Access。这是一篇文章,概述了实现这一目标的方法:

    http://www.everythingaccess.com/tutorials.asp?ID=Outlook-Send-E-mail-Without-Security-Warning

    有点深入,但能胜任。希望这会有所帮助!不幸的是,由于安全模型的原因,您不能只是禁用它,而必须更进一步才能在用户的机器上允许这种类型的行为。烦人的部分是在每台用户机器上设置它,如果这要在每台机器上触发,而不是在服务器上某个地方的中心位置。

    【讨论】:

      【解决方案2】:

      查看Outlook Redemption 以避免出现 Outlook 安全警告。

      还将宏命名为“autoexec”意味着每次打开数据库时 Access 都会尝试运行宏。作为替代方案,您可以为宏指定一个不同的名称,例如“mcrMidniteEmail”,然后在任务调度程序中使用 /x command-line switch

      /x mcrMidniteEmail
      

      编辑:如果您有一个可用的 GMail 帐户,您还可以使用 VBA 使用 SMTP 通过该帐户发送电子邮件......而不涉及 Outlook。见Sending Google Mail (Gmail) from MS Access, VBA, Excel, Word...

      【讨论】:

      • 感谢 HansUp!我正在为我的公司使用计算机/电子邮件,所以我必须使用 Outlook。
      • 好的,如果 GMail 不在,请查看 Outlook Redemption。
      【解决方案3】:

      以下代码总是对我有用。

      Sub CDO_Mail_Small_Text(Mailto, MailCC, Mailtext, Optional Subject = "", Optional Attachment = "")
      Dim iMsg As Object
      Dim iConf As Object
      Dim strbody As String
      Dim Flds As Variant
      
      Set iMsg = CreateObject("CDO.Message")
      Set iConf = CreateObject("CDO.Configuration")
      
          iConf.Load -1    ' CDO Source Defaults
          Set Flds = iConf.Fields
          With Flds
              .Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
              .Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") _
                             = "mail.Mybusiness.com"
              .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
              .Update
          End With
      
      strbody = "Enter the Email body."
      
      With iMsg
          Set .Configuration = iConf
          .To = Mailto
          .cc = MailCC
          .BCC = ""
          .From = """Do Not Reply "" <NoReply@MyBusiness.com>"
          If Subject = "" Then
          .Subject = "EMail Subject"
          Else
          .Subject = Subject
          End If
          .TextBody = Mailtext
          If Attachment <> "" Then .AddAttachment Attachment
          .send
      End With
      
      Set iConf = Nothing
      Set iMsg = Nothing
      
      End Sub
      

      当然,您可以将此代码用于 gmail 或其他电子邮件服务器。

      【讨论】:

      • 您好,谢谢您的回复!这似乎是一个简单的解决方案。我试图运行它,但我收到一条错误消息:“检测到不明确的名称 CDO_Mail_Small_Text”。我添加了 CDO 库参考,但仍然是同样的问题。感谢您的宝贵时间!
      • 也许您已经有相同的变量或函数“CDO_Mail_Small_Text”尝试将此子设为私有,看看您在其他地方是否有相同的功能。
      • CDO 不是作为标准 Windows 组件被淘汰了吗?
      • 谢谢你!你说的对!我不再收到那个错误消息了。但是,我没有在您的代码中看到应该以 pdf 格式发送报告的声明?在同一个 Access db 中有一份报告,我需要通过电子邮件发送给它。如果我是正确的,您的代码会发送一个文本正文,但没有附加报告。想法?
      • 哦,我忘了提到,在这段代码中,我在发送电子邮件之前使用 PDF 打印机创建了 PDF 文件。
      【解决方案4】:

      您始终可以将表单“计时器”事件与“计时器间隔”结合使用来调用准备和发送电子邮件的夜间例程。只需包含条件代码以验证是时候发送电子邮件了。一些公司环境会锁定 Windows 任务计划程序,因此这是一个可行的选择。

      【讨论】:

        猜你喜欢
        • 2016-06-11
        • 2021-08-29
        • 2012-09-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-03
        • 2013-10-15
        • 1970-01-01
        相关资源
        最近更新 更多