Sendkeys没有正确的焦点

时间:2018-08-13 14:36:20

标签: vba outlook outlook-vba sendkeys

我想在Outlook 2014中自动化一些基本操作,因此我在VBA中创建了一个宏。但是,如果脚本执行期间发生任何错误,我需要发送电子邮件,并且我想绕过Outlook的确认消息(当您要发送带有宏的邮件时出现的弹出窗口)。

Private Sub sendEmailError()
  Dim Email As Outlook.Application
  Dim EmailMsg As Outlook.MailItem
  Dim Dest As Outlook.Recipient

  Set Email = CreateObject("Outlook.Application")
  Set EmailMsg = Email.CreateItem(olMailItem)
  Set Dest = EmailMsg.Recipients.Add("mail@mail.com")

  EmailMsg.Subject = MessageSubject
  EmailMsg.Body = MessageBody
  EmailMsg.Display
  SendKeys "^{ENTER}", True
End Sub

我认为“ EmailMsg.Display”将焦点放在消息框上,然后,由于sendkey,我可以执行发送电子邮件的快捷方式。但是焦点并没有集中在消息框上,并且在宏结束后在我的脚本中完成了control + key快捷键的操作。

谢谢您的帮助!

5 个答案:

答案 0 :(得分:1)

可能可以覆盖该提示,但是从定义上讲,您不应该这样做,我的猜测是,Microsoft可能已采取了一些安全措施来阻止您这样做。该提示旨在确保用户可以通过宏将其电子邮件弄乱,从而避免用户误以为是,它可以使宏仅代表用户单击“确定”。

您可以做的是进入Outlook信任中心,然后在“程序访问”选项卡上,将其设置为“从不警告我有关可疑活动”。这将永久删除提示。

答案 1 :(得分:0)

我知道它不是您想要的,但是

EmailMsg.Send 

代替

EmailMsg.Display

将立即发送

答案 2 :(得分:0)

带有额外的警告消息,它将看起来像这样:

Private Sub sendEmailError()
  Dim Email As Outlook.Application
  Dim EmailMsg As Outlook.MailItem
  Dim Dest As Outlook.Recipient

  Set Email = CreateObject("Outlook.Application")
  Set EmailMsg = Email.CreateItem(olMailItem)
  Set Dest = EmailMsg.Recipients.Add("mail@mail.com")

  EmailMsg.Subject = MessageSubject
  EmailMsg.Body = MessageBody
  EmailMsg.Send
  SendKeys " "
End Sub

答案 3 :(得分:0)

您确实需要处理安全提示。请参阅http://www.outlookcode.com/article.aspx?id=52,以获取选项列表。本质上,它要么是在计算机上安装最新的AV应用程序(然后Outlook将不会显示提示),要么使用诸如RedemptionOutlook Security Manager之类的产品。

答案 4 :(得分:0)

谢谢大家的回应!

我发现了如何在没有Outlook发出警告的情况下发送电子邮件。我使用Windows的CDO库通过SMTP发送电子邮件,一切正常。

非常感谢您!