Excel可以发送电子邮件给不同的用户基于单元格值吗?

我想知道在尝试这样做之前是否有可能/可行/合乎逻辑。

我有一个networking驱动器共享的文件,约20-30人的工作/更新。

有多个字段,多个工作表。

在许多表单中都有一个用户列和一个状态列。

ROW ITEM USER STATUS ---------------------------------------------------- 1 Web Job 1 John In Progress 2 Web Service A Mike Delivered 3 WPF Job 2 Amy In Progress 4 Test Job 1 Brian Delivered 

当一个状态行更新为“Delivered”(同样,在这个工作簿上工作的30个人中的任何一个人都可以改变状态),VBAmacros是否可能发送电子邮件给Mike(这个例子中)和Brian “你的工作项目已经交付”?

我担心的是有这么多人搅拌锅,可以这么说,基于更新的工作簿来自动化通知过程是不实际的。

值得追求还是应该放弃这个呢?

是的,这是可能的,但正如所说的,它可能不是共享工作簿的最佳想法。 如果你希望继续下去,我将如何做到这一点。 对于这个解决scheme的目的,我假设每个用户都在他们的机器上安装了Outlook。

首先,打开VBA IDE,点击“工具”—>“参考…”,选中“Microsoft Outlook 14.0 Object Library”旁边的checkbox(可能有不同的版本号),添加对Outlook COM的引用。

其次,你可以使用下面代码的一些变化来生成一个电子邮件。 我使用了HTMLBody属性,因为我通常使用html标签来自动生成电子邮件的格式,但是您可能只想使用纯文本。 创build一个模块并将其添加到它。

 Public Sub sendMail(strTo As String, _ strSubject As String, _ strBodyText As String, _ Optional strCC As String = "", _ Optional oAttachments As Collection = Nothing) 'This function creates an email and immediately sends it. Dim Attachment As Variant Dim oMailItem As Outlook.MailItem 'Create the email Set oMailItem = Outlook.Application.CreateItem(olMailItem) 'Populate the email properties With oMailItem .Subject = strSubject .To = strTo 'Add the CC recipients, if any .CC = strCC .HTMLBody = strBodyText .BodyFormat = olFormatHTML 'Add the attachments, if any If Not (oAttachments Is Nothing) Then For Each Attachment In oAttachments .Attachments.Add (Attachment) Next Attachment End If 'Send it! .Send End With 'Release the object Set oMailItem = Nothing End Sub 

第三,您将需要添加一个Worksheet_Change事件处理程序到每个包含应该触发电子邮件的状态列的工作表。 我build议使用VBA代码窗口上方的下拉菜单,通过select左侧下拉菜单中的“工作表”和右侧的“更改”来获得正确的function声明。 在函数中,您需要确保Target位于STATUS列中,并且它与您正在查找的string值相匹配。 我把它作为一个练习放在一起,但如果你有任何问题,请告诉我。

有一些需要注意的问题:

  • 更改事件会在用户离开目标单元格后立即触发,这意味着电子邮件也会如此。 这意味着即使有人不小心更改了状态栏,电子邮件仍然会发送。

  • 代码在每个用户的机器上运行,所以如果两个用户改变同一个STATUS单元格,电子邮件将从两台机器上触发(不太确定Excel多用户更改冲突解决方式如何影响这个)。

  • 我相信,如果Outlook没有运行,它将启动电子邮件发送。 在发生这种情况时,Excel可能会挂起。