从Outlook运行Excelmacros,基于邮件主题触发

我试图build立一个自动化的过程,当我收到一个电子邮件在Outlook中包含“主题”它会自动引发一个macros打开Excel中附加的.xls文件,并运行我在Excel中设置的macros。 这怎么能做到呢?

如有必要可以提供更多信息 – 谢谢!

有两种可能的方式来实现你的任务。

第一个是创build一个Outlook规则,为规则触发时分配一个VBAmacros来运行。 VBAmacros子应该看起来像下面这样:

Public Sub Test(mail as MailItem) ' so something here End Sub 

第二种方法是处理Application类的NewMailEx事件。 在这种情况下,不需要在Outlook中创build规则。 你的代码将被事件触发。 这是MSDN所说的:

对于由Microsoft Outlook处理的每个收到的项目,此事件触发一次。 该项目可以是几种不同的项目types之一,例如MailItem,MeetingItem或SharingItem。 EntryIDsCollectionstring包含与该项目对应的Entry ID。

新邮件到达收件箱时,在客户端规则处理发生之前触发NewMailEx事件。 您可以使用EntryIDCollection数组中返回的Entry ID来调用NameSpace.GetItemFromID方法并处理该项目。 请谨慎使用此方法,以尽量减less对Outlook性能的影响。 但是,根据客户端计算机上的设置,在收件箱中收到新邮件后,可能会asynchronous发生垃圾邮件筛选和将新邮件从收件箱移动到另一个文件夹的客户端规则。 您不应该认为这些事件触发后,收件箱中的项目数量总是会增加一个。

在代码中,您将需要自动化Excel。 Application类的Run方法可以用于以编程方式运行VBAmacros。

最后,您可能会发现Outlook 2010中的VBA入门文章很有帮助。

首先您需要在Outlook中编写vba代码。 这个网站可以帮助你开始。 然后让它检查附件是否可以打开的文件types,如果是这样的话,让它打开excel。 在excel文件上运行另一个macros需要excel的vba代码也打开包含您编写的macros的工作簿,因此您还需要一种方法,让outlookmacros可以将该文件名插入到excelmacros中以标识哪个工作簿excelmacros需要运行。

编辑:也许还有一种方法可以让您打开的Excel工作簿从您将其存储在硬盘上的位置导入macros,这将节省您打开另一个Excel文件,并引用到您希望它运行的文件。 然后你可以参考“ActiveWorksheet”