【发布时间】:2020-07-08 19:25:17
【问题描述】:
我正在尝试设置一个自动化流程,当我在 Outlook 中收到包含“主题”的电子邮件时,它会自动触发宏以在 Excel 中打开附加的 .xls 文件并运行我在 Excel 中设置的宏.这如何实现?
如有需要,可以提供更多信息 - 谢谢!
【问题讨论】:
-
附件是宏吗?或者您只是想打开附件然后调用第二个 excel 文件。?
我正在尝试设置一个自动化流程,当我在 Outlook 中收到包含“主题”的电子邮件时,它会自动触发宏以在 Excel 中打开附加的 .xls 文件并运行我在 Excel 中设置的宏.这如何实现?
如有需要,可以提供更多信息 - 谢谢!
【问题讨论】:
您首先需要在 Outlook 中编写 vba 代码。 This site 可以帮助您入门。 然后让它检查附件是否是excel可以打开的文件类型,如果是这样,让它打开excel。 在 excel 文件上运行另一个宏将需要 excel 的 vba 代码同时打开包含您编写的宏的工作簿,因此您还需要一种方法,Outlook 宏可以将文件名插入到 excel 宏中以识别哪个工作簿上需要运行excel宏。
编辑:也许还有一种方法可以使您打开的 excel 工作簿从您将宏存储在硬盘上的位置导入宏,这样可以节省您打开另一个 excel 文件并引用您想要的文件的时间运行。然后你可以参考“ActiveWorksheet”
【讨论】:
有两种可能的方式来实现你的任务。
第一个是创建一个 Outlook 规则并分配一个 VBA 宏,以便在规则触发时运行。 VBA 宏子应如下所示:
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 文章很有帮助。
【讨论】: