VBA Outlook :(暂时)停止传入电子邮件中的脚本

时间:2019-07-07 14:58:31

标签: vba outlook procedure

我使用

处理传入的电子邮件
Private WithEvents objNewMailItems As Outlook.Items

作为启动过程和

Private Sub objNewMailItems_ItemAdd(ByVal item As Object)

每当新电子邮件到达收件箱时执行。

问题:如何(手动)停止执行此程序?

2 个答案:

答案 0 :(得分:0)

objNewMailItems被声明为事件提供程序;只要设置了引用,它就会触发事件。

要使其停止,您需要将其引用设置为Nothing

Public Sub StopHandlingNewMailItems()
    Set objNewMailItems = Nothing
End Sub

获取当前正在分配该对象引用的代码,将其移至StartHandlingNewMailItems()过程,然后在启动时调用它;现在您可以随意打开/关闭处理新邮件项目。

答案 1 :(得分:0)

如果将多个项目(超过16个)添加到文件夹,则可能根本不会触发ItemAdd事件。我建议改为处理NewMailEx类的Application事件。对于Microsoft Outlook处理的每个收到的项目,将触发一次此事件。该项目可以是几种不同的项目类型之一,例如MailItemMeetingItemSharingItemEntryIDsCollection字符串包含与该项目对应的条目ID。

当新消息到达收件箱时以及在发生客户端规则处理之前,将触发NewMailEx事件。您可以使用EntryIDCollection数组中返回的Entry ID来调用NameSpace.GetItemFromID方法并处理该项目。

Private Sub outApp_NewMailEx(ByVal EntryIDCollection As String)
    if Cancel then
      Dim itm as Outlook.MailItem
      Set itm = NS.GetItemFromID(EntryIDCollection)

      If itm.Class = olMail Then

        Debug.Print "mail received"
        Debug.Print itm.Parent.Parent.name

      End If
    End If
End Sub

要阻止VBA宏运行,您可以添加一个名为“ CancelButton”的按钮来设置标志,然后在NewMailEx事件处理程序中检查该标志。

Bool Cancel
Private Sub CancelButton_OnClick()
    Cancel=True
End Sub

最后,您可能会发现How to stop VBA code running?帖子很有帮助。