【问题标题】:Trigger VBA code to run after a new mail is received in Outlook? [duplicate]在 Outlook 中收到新邮件后触发 VBA 代码运行? [复制]
【发布时间】:2013-09-07 06:26:39
【问题描述】:

Win 7,Outlook 2013 我使用 VBA 代码对到达我收件箱的一些文件执行操作。但是,我必须单击/运行按钮才能运行此宏。

有没有一种方法可以在电子邮件到达时自动运行此代码?

我已尝试使用 Outlook 规则来运行脚本,但未成功。

我试过这个,但只有在我运行宏时才有效

Private Sub Application_NewMail()
    Call GetAttachments_From_Inbox (My Macro)
End Sub

【问题讨论】:

  • 我在 Outlook 中创建了至少 10 个项目,并且在每个项目中我都使用 Application_NewMail() 没有问题。它就像一个魅力。这个函数的唯一问题是,只有在您打开 Outlook 后收到的邮件才会调用 NewMail 事件。如果您的 Outlook 已关闭,并且您在其间收到了邮件,然后您再次启动 Outlook。对于 Outlook 关闭时可能已收到的邮件,不会触发 NewMail 事件。

标签: vba email outlook outlook-2013


【解决方案1】:

我专门使用我作为规则运行的脚本,应用于所有消息。这使您可以轻松、清晰地访问您收到的邮件。由于您希望在收件箱中设置WithEvents 的每条消息都运行此操作,因此可能是您最好的选择。

例如:

您可以为 Outlook 文件夹创建侦听器,如下所示:

Private WithEvents mainInboxItems As Outlook.Items

Public Sub Application_Startup()

    Dim olApp As Outlook.Application
    Dim objNS As Outlook.NameSpace
    Set olApp = Outlook.Application
    Set objNS = olApp.GetNamespace("MAPI")

    Set mainInboxItems = objNS.Folders("whatever your main mailbox is called").Folders("AssignNumber").Items
    'assumes your "AssignNumber" folder is a subfolder of the main inbox
    'otherwise you can nest Folders("myArchive").Folders("AssignNumber).items etc
End Sub

您也可以对任意数量的文件夹执行此操作。

然后您可以将ItemAdd 方法分配给他们每个人,例如:

Private Sub mainInboxItems_ItemAdd(ByVal item As Object)
'do Stuff to mailitem
 Call GetAttachments_From_Inbox (item)
End Sub

所有这些代码都可以放在 ThisOutlookSession 中。

【讨论】:

  • 我将收件箱作为我的主邮箱,一旦找到特定文件作为附件,它就会下载并移动到文件夹“个人邮件”,当我尝试上述代码时,它会给出错误“对象无法被找到' Set mainInboxItems = objNS.Folders("无论你的主邮箱叫什么").Folders
  • @user2738649 您需要将“无论您的主收件箱称为什么”更改为您的收件箱名称。我的类似于“邮箱 - enderland”
  • 如果它被放置在ThisOutlookSession 你不需要命名Outlook.Application : Dim objNS AS NameSpace: Set objNS = GetNamespace("MAPI")
猜你喜欢
  • 2021-04-21
  • 2020-02-09
  • 1970-01-01
  • 1970-01-01
  • 2022-01-19
  • 2013-02-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多