将具有特定主题的 Outlook 邮件移动到子文件夹



我正在尝试编写一个简短的VBA脚本,该脚本将传入邮件从我的Outlook收件箱移动到子文件夹。 这是我目前拥有的(从各种帖子中组装而成),但是当我发送测试电子邮件时,我没有得到任何结果。 如果还有其他与此相关的帖子,我将不胜感激!

Private Sub Application_Startup()
  Dim olApp As Outlook.Application
  Dim objNS As Outlook.NameSpace
  Set olApp = Outlook.Application
  Set objNS = olApp.GetNamespace("MAPI")
  ' Default local Inbox
  Set Items = objNS.GetDefaultFolder(olFolderInbox).Items
End Sub
Private Sub Items_ItemAdd(ByVal item As Object)
  On Error GoTo ErrorHandler
  Dim Msg As Outlook.MailItem
  Set myInbox = GetNamespace("MAPI").GetDefaultFolder(olFolderInbox)
  If TypeName(item) = "MailItem" Then
    Set Msg = item
    If Msg.SenderEmailAddress = "name@example.com" Then
        If InStr(0, Msg.Subject, "Subject Title", vbTextCompare) > 0 Then
        Msg.Move myInbox.Folders("Test").Subfolder("Destination")
        End If
    End If
  End If
ProgramExit:
  Exit Sub
ErrorHandler:
  MsgBox Err.Number & " - " & Err.Description
  Resume ProgramExit
End Sub

看起来您没有正确定义和初始化 Items 对象。例如:

 Public WithEvents myOlItems As Outlook.Items
 Public Sub Initialize_handler()  
     Set myOlItems = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderContacts).Items  
 End Sub 
 Private Sub myOlItems_ItemAdd(ByVal Item As Object)  
    ' do something here
 End Sub

请注意,当同时添加超过 16 个项目时,不会触发 ItemAdd 事件。这是 OOM 中的已知问题。

尝试改用应用程序类的 NewMailEx 事件。我建议阅读以下系列文章:

  • Outlook NewMail 事件释放:挑战(NewMail、NewMailEx、ItemAdd)
  • 展望新邮件事件:解决方案选项
  • Outlook NewMail 事件和扩展 MAPI:C# 示例
  • Outlook NewMail 释放:编写工作解决方案(C# 示例)

最后,您的宏是否在Outlook中启用?是否已查看信任中心设置?

将代码放在 ThisOutlookSession 中。

正好在你的代码上方放

Public WithEvents Items As Items

使用内置类模块 ThisOutlookSession 时,Sub Application_Startup() 初始化处理程序。

相关内容

  • 没有找到相关文章

最新更新