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

时间:2015-10-23 16:46:51

标签: vba outlook outlook-vba

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

然后我将脚本链接到Outlook规则向导中的规则,以便它作为包运行。

问题如下:在将邮件分类到适当的文件夹之前,脚本已启动。实际上它应该在消息被排序之后运行(否则没有任何东西可以对其进行操作)。关于如何纠正的任何想法?

代码目前开头如下:

    sub saveattachment()

应该是这样吗?

    private sub saveattachment()

    public sub saveattachment()

将“规则”嵌入到宏中更好,然后只要每天电子邮件出现在我的收件箱中,就可以将其作为私有子进​​行运行吗?

1 个答案:

答案 0 :(得分:0)

如果需要为Outlook规则分配VBA宏子站点,则VBA子站应如下所示:

Public Sub Test(mail as MailItem)
  ' your code goes there
End Sub

MailItem类的实例作为参数传递,代表到达收件箱的电子邮件。

但是,如果您需要确保在将邮件移动到特定文件夹时触发了代码,则需要处理来自该文件夹的Items类的ItemAdd事件。请注意,当同时向文件夹中添加超过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

最后,您可能会发现Getting Started with VBA in Outlook 2010文章很有帮助。