首页 > 解决方案 > 如何将收件箱 ItemAdd 转换为在子文件夹上运行?

问题描述

我的代码不起作用,因为电子邮件被转发到带有规则的子文件夹。

我无法删除此规则,也无法在此计算机上制定任何规则。

我意识到 newMailEx 可能是我的问题的答案。有没有办法将我的代码转换为运行它而不是 item_add?

Private WithEvents Items As Outlook.Items
Private Sub Application_Startup()
    Dim olApp As Outlook.Application
    Dim objNS As Outlook.NameSpace
    Set olApp = Outlook.Application
    Set objNS = olApp.GetNamespace("MAPI")
    Set Items = objNS.Folders.Item("Data").Folders.Item("Inbox").Items
End Sub
    
Private Sub Items_ItemAdd(ByVal Item As Object)
    Dim Msg As Outlook.MailItem
    If TypeOf Item Is Outlook.MailItem Then
        '''code to check subject lines and do various things to attachments for the various cases
    End If
End Sub

标签: vbaoutlook

解决方案


如果您在 Outlook 中创建 VBA 宏,您需要Application在左侧下拉菜单中选择 并选择NewMailEx要在编辑器中生成事件处理程序的事件。

NewMailEx 事件处理程序

NewMailEx从下拉列表中选择条目后,您将获得以下内容,您可以在其中添加代码:

Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)

End Sub

因此,在事件处理程序中,您可以通过以下方式使用 `` 方法:

Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
    Dim mail as Outlook.MailItem
    Set mail = Application.Session.GetItemFromID(strEntryId)
    MsgBox mai.Subject
End Sub

请记住,可以将不同类型的项目传递给事件处理程序。例如,它可以是约会项目(会议请求)。您需要在转换到该类之前检查其消息类,MailItem以确保您处理邮件项目。否则,如果调用不存在的方法或属性,可能会引发异常。


推荐阅读