从Outlook运行Excel宏,基于电子邮件主题触发

时间:2015-07-10 14:10:30

标签: excel vba excel-vba outlook

我尝试设置自动流程,以便在Outlook中收到包含" subject"它会自动触发宏以在Excel中打开附加的.xls文件并运行我在Excel中设置的宏。如何实现这一目标?

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

2 个答案:

答案 0 :(得分:2)

首先需要在Outlook中编写vba代码。 This site可以帮助您入门。 然后检查附件是否是excel可以打开的文件类型,如果是这种情况,则让它打开excel。 在excel文件上运行另一个宏需要excel的vba代码也打开包含你编写的宏的工作簿,所以你还需要一种方法,在这种方法中,outlook宏可以将文件名插入到excel宏中来识别哪个工作簿上的需要运行excel宏。

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

答案 1 :(得分:1)

实施任务有两种可能的方式。

第一个是创建Outlook规则,并在规则触发时分配VBA宏以便运行。 VBA宏sub应如下所示:

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

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

此事件会针对Microsoft Outlook处理的每个已接收项触发一次。该项可以是几种不同项类型之一,例如,MailItem,MeetingItem或SharingItem。 EntryIDsCollection字符串包含与该项对应的条目ID。

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

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

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