Vba Excel是否可以基于单元格值向不同用户发送电子邮件?
在尝试之前,我想知道这是否可能/可行/合乎逻辑 我在一个网络驱动器上有一个共享文档,大约有20-30人在其中工作/更新 有多个字段,多个工作表 在多张图纸上有一个用户栏和一个状态栏Vba Excel是否可以基于单元格值向不同用户发送电子邮件?,vba,excel,Vba,Excel,在尝试之前,我想知道这是否可能/可行/合乎逻辑 我在一个网络驱动器上有一个共享文档,大约有20-30人在其中工作/更新 有多个字段,多个工作表 在多张图纸上有一个用户栏和一个状态栏 ROW ITEM USER STATUS ---------------------------------------------------- 1 Web Job 1 John In Progress 2
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
当状态行更新为“已交付”(同样,处理此工作簿的30个人中的任何人都可以更改状态)时,VBA宏是否可以向(在本例中)Mike和Brian发送电子邮件,说“您的工作项已交付”
我担心的是,有这么多人在搅拌锅,可以说,根据正在更新的工作簿自动化通知过程是不现实的
它值得追求还是应该完全放弃呢?是的,这是可能的,但正如mehow所说,共享工作簿可能不是最好的主意。如果你真的想继续,我会这样做。出于此解决方案的目的,我假设每个用户的计算机上都安装了Outlook 首先,打开VBA IDE,单击“工具”-->“引用…”并选中“Microsoft Outlook 14.0对象库”旁边的框(您可能有不同的版本号)以添加对Outlook COM的引用 其次,您可以使用下面代码的一些变体来生成电子邮件。我使用了
HTMLBody
属性,因为我通常使用html标记来格式化自动生成的电子邮件,但您可能只想使用纯文本。创建一个模块并将此代码添加到其中
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
第三,您需要在每个包含状态列的工作表中添加一个工作表\u Change
事件处理程序,该列应触发电子邮件。我建议使用VBA代码窗口上方的下拉菜单,在左侧下拉菜单中选择“工作表”,在右侧下拉菜单中选择“更改”,以获得正确的函数声明。在函数中,您需要确保目标
位于状态列中,并且它与您要查找的字符串值匹配。我把它作为一个练习留给你,让你把它放在一起,但如果你有任何问题,请告诉我
有一些问题需要注意:
- 更改事件在用户进行更改后离开目标单元格后立即触发,这意味着电子邮件也会触发。这意味着,即使有人意外更改了“状态”列,电子邮件仍将发送
- 代码在每个单独用户的计算机上运行,因此如果两个用户更改相同的状态单元格,电子邮件将从两台计算机发出(不太确定Excel多用户更改冲突解决方案如何影响这一点)
- 我相信如果Outlook没有运行,它将启动以发送电子邮件。发生这种情况时,Excel可能会挂起