应用于规则的Outlook VBA脚本出错

应用于规则的Outlook VBA脚本出错,vba,outlook,Vba,Outlook,我在Outlook中有一条规则,每天将电子邮件发送到特定文件夹。然后,我有一个VBA脚本,当注意到该文件夹中有一条新的未读邮件时,它会进入并将附件保存到硬盘上的一个文件夹中,并执行一些其他格式化类型的操作(在附件上) 然后,我将脚本链接到Outlook规则向导中的规则,使其作为一个包运行 问题如下:在将消息排序到适当的文件夹之前,脚本被启动。实际上,它应该在消息被排序后运行(否则它就没有什么可操作的)。有没有关于如何纠正的想法 代码当前的开头如下: sub saveattachment(

我在Outlook中有一条规则,每天将电子邮件发送到特定文件夹。然后,我有一个VBA脚本,当注意到该文件夹中有一条新的未读邮件时,它会进入并将附件保存到硬盘上的一个文件夹中,并执行一些其他格式化类型的操作(在附件上)

然后,我将脚本链接到Outlook规则向导中的规则,使其作为一个包运行

问题如下:在将消息排序到适当的文件夹之前,脚本被启动。实际上,它应该在消息被排序后运行(否则它就没有什么可操作的)。有没有关于如何纠正的想法

代码当前的开头如下:

    sub saveattachment()
应该是这个吗

    private sub saveattachment()


是否最好将“规则”嵌入宏中,然后在“我的收件箱”中显示每日电子邮件时将其作为专用子项运行?

如果需要将VBA宏子项指定给Outlook规则,VBA子项应如下所示:

Public Sub Test(mail as MailItem)
  ' your code goes there
End Sub
MailItem类的实例作为参数传递,表示到达收件箱的电子邮件

但如果您需要确保在邮件移动到特定文件夹时触发代码,则需要处理来自该文件夹的Items类的事件。请注意,如果同时向文件夹中添加了16个以上的项目,则不会触发该事件

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) 
 Dim myOlMItem As Outlook.MailItem 
 Dim myOlAtts As Outlook.Attachments 
 Set myOlMItem = myOlApp.CreateItem(olMailItem) 
 myOlMItem.Save 
 Set myOlAtts = myOlMItem.Attachments 
 ' Add new contact to attachments in mail message 
 myOlAtts.Add Item, olByValue 
 myOlMItem.To = "Sales Team" 
 myOlMItem.Subject = "New contact" 
 myOlMItem.Send 
End Sub
最后,您可能会发现这篇文章很有帮助

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) 
 Dim myOlMItem As Outlook.MailItem 
 Dim myOlAtts As Outlook.Attachments 
 Set myOlMItem = myOlApp.CreateItem(olMailItem) 
 myOlMItem.Save 
 Set myOlAtts = myOlMItem.Attachments 
 ' Add new contact to attachments in mail message 
 myOlAtts.Add Item, olByValue 
 myOlMItem.To = "Sales Team" 
 myOlMItem.Subject = "New contact" 
 myOlMItem.Send 
End Sub