【问题标题】:First sendkeys automated email doesn't actually get sent from Outlook第一个 sendkeys 自动电子邮件实际上并没有从 Outlook 发送
【发布时间】:2016-05-12 09:01:18
【问题描述】:

这让我很困惑......

我有一组 Excel 报告,我在早上运行,生成六封电子邮件,每封都带有附件,另外还有一个在星期三运行的单独报告集,只生成一封电子邮件。

为了使这些报告完全自动化并在没有监督的情况下运行并通过 Outlook 安全弹出窗口,我使用了这样的 Sendkeys 功能(这是来自“星期三”报告):

Dim OutApp As Object
Dim OutMail As Object
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
    With OutMail
        .To = distlist
        .CC = ""
        .BCC = ""
        .Subject = "30+ Days and Early Warning lists for " & Format(Now, "dd mmm")
        .Body = "Latest lists attached"
        .Attachments.Add ("C:\Users\" & whoami & "\Desktop\" & outputdirectoryname & "\" & outputfile1 & "")
        .Attachments.Add ("C:\Users\" & whoami & "\Desktop\" & outputdirectoryname & "\" & outputfile2 & "")
        .Display
        Application.Wait (Now + TimeValue("0:00:06"))
        Application.SendKeys "%s"
End With
Set OutMail = Nothing
Set OutApp = Nothing
Sheets("Run Buttons").Select

...效果很好。

现在,我的问题不是此代码不能正常工作,而是第一封电子邮件实际上从未被 Outlook 发送,而是仍然显示并“卡在”发件箱中。如果我未能手动干预并“发送”这第一封电子邮件,那么后续的邮件也会“卡住”,但是,如果我手动“发送”它,其他邮件会按预期通过。

因此,例如,星期三的场景是这样的......

  1. 运行周三报告 - 电子邮件无法发送,因此请点击“发送”
  2. 运行其他通常的早间报告 - 所有电子邮件都会自动通过

对于周一、周二、周四、周五的跑步......

  1. 第一封电子邮件发送失败,请点击“发送”
  2. 其余电子邮件将自动发送。

如果我反转报告的运行,以便最后运行周三报告,其电子邮件会按预期自动通过。

我的笔记本电脑被锁得比...更紧,所以不会发生任何“添加”软件,同样直接访问 SMTP/Exchange 服务器,所以现在 Sendkeys 是我唯一可用的电子邮件自动化。 Sendkeys 代码的所有出现都是相同的。

正如我所说,困惑!

那么我对 Excel 或 Outlook 有疑问吗?

...我该如何“修复”它?

非常感谢您的帮助和时间。

【问题讨论】:

  • 创建邮件时是否打开了outlook?
  • 您好 Kathara,Outlook 已经打开。虽然这些报告往往是早上的第一项任务,所以通常是第一个使用 Outlook,但有时我必须先回复电子邮件,所以在运行之前已经成功使用了 Outlook(并开始出现故障)这些报告
  • 好的。因为它曾经发生在我身上,我没有打开 Outlook,而是“发送”一封邮件,然后卡在发件箱中。您可以尝试将“Appliation.SendKeys "%s" " 交换为 ".Send" 并查看是否有效吗? :)
  • 是的,“.Send”每次都可以正常工作,因为我必须响应 Outlook 提示,实际上,它为我点击了“发送”。这是因为需要绕过 Outlook 弹出窗口,我正在使用“Application.SendKeys”%s“”

标签: excel vba outlook sendkeys


【解决方案1】:

仅当检查器在前台处于活动状态时,SendKeys 才可能起作用。为什么不尝试其他解决方法(ClickYes,Redemption)?见http://www.outlookcode.com/article.aspx?id=52

【讨论】:

    【解决方案2】:

    在.Display前添加如下代码

    If Application.VBE.MainWindow.Visible = True Then Application.VBE.MainWindow.Visible = False
    

    【讨论】:

    • 遗憾的是,添加这一行给出了 1004 'Programmatic access to Visual Basic Project is not trust' 错误'。
    猜你喜欢
    • 2012-06-28
    • 1970-01-01
    • 2015-06-25
    • 1970-01-01
    • 1970-01-01
    • 2013-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多