Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 将具有特定主题的Outlook邮件移动到子文件夹_Vba_Outlook_Subdirectory_Inbox - Fatal编程技术网

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

Vba 将具有特定主题的Outlook邮件移动到子文件夹,vba,outlook,subdirectory,inbox,Vba,Outlook,Subdirectory,Inbox,我正在尝试编写一个简短的VBA脚本,将传入的邮件从Outlook收件箱移动到子文件夹。这是我目前拥有的(从各种帖子中收集的),但当我发送测试电子邮件时,我并没有得到任何结果。如果有任何其他职位,将与此相关,我将不胜感激 Private Sub Application_Startup() Dim olApp As Outlook.Application Dim objNS As Outlook.NameSpace Set olApp = Outlook.Application Se

我正在尝试编写一个简短的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中启用了宏?您签出信任中心设置了吗?

将您的代码放入此Outlook会话

就在你的代码上面

Public WithEvents Items As Items

当使用内置类模块ThisOutlookSession时,子应用程序启动()会初始化处理程序。

我还更新了帖子。请参阅以上更改。谢谢您的建议!我的宏已启用,我将试用NewMailEx应用程序。但是,目前我仍然没有收到当前宏的任何响应-当测试电子邮件通过时,我甚至没有收到通知(即没有错误)。有什么想法吗?你在Outlook中查看了信任中心设置了吗?允许运行宏吗?我将信任中心内的宏设置更改为“启用所有宏”。我相信这是运行宏的唯一相关设置,对吗?