Domenic的工作表在E列中显示项目的截止日期。他知道他可以使用条件格式显示何时到达截止日期(与今天的日期相同),但是他真正需要的是在到达截止日期时发送一封电子邮件。他想知道在Excel中是否有办法做到这一点。

实际上,有一种方法可以做到这一点,只要您不介意使用宏即可。另外,您将需要通过Outlook发送电子邮件,VBA可以正常通信。 (不幸的是,不能轻易使用VBA与其他邮件客户端连接。)

例如,这里是一个宏,它将在您的工作簿打开时运行。它将自动检查工作表中的每一行,特别是键入以下两项内容:E列中的到期日期和F列中的“标志值”。(此标志值由宏设置。如果F列包含字母“ S, “,则宏假定先前已发送过电子邮件。)

Private Sub Workbook_Open()

Dim OutApp As Object     Dim OutMail As Object     Dim lLastRow As Long     Dim lRow As Long     Dim sSendTo As String     Dim sSendCC As String     Dim sSendBCC As String     Dim sSubject As String     Dim sTemp As String

Set OutApp = CreateObject("Outlook.Application")

OutApp.Session.Logon

' Change the following as needed     sSendTo = "[email protected]"

sSendCC = ""

sSendBCC = ""

sSubject = "Due date reached"



lLastRow = Cells(Rows.Count, 3).End(xlUp).Row     For lRow = 2 To lLastRow         If Cells(lRow, 6) <> "S" Then             If Cells(lRow, 5) <= Date Then                 Set OutMail = OutApp.CreateItem(0)



On Error Resume Next                 With OutMail                     .To = sSendTo                     If sSendCC > "" Then .CC = sSendCC                     If sSendBCC > "" Then .BCC = sSendBCC                     .Subject = sSubject

sTemp = "Hello!" & vbCrLf & vbCrLf                     sTemp = sTemp & "The due date has been reached "

sTemp = sTemp & "for this project:" & vbCrLf & vbCrLf                     ' Assumes project name is in column B                     sTemp = sTemp & "    " & Cells(lRow,2)

sTemp = sTemp & "Please take the appropriate"

sTemp = sTemp & "action." & vbCrLf & vbCrLf                     sTemp = sTemp & "Thank you!" & vbCrLf

.Body = sTemp                     ' Change the following to .Send if you want to                     ' send the message without reviewing first                     .Display                 End With                 Set OutMail = Nothing

Cells(lRow, 6) = "S"

Cells(lRow, 7) = "E-mail sent on: " & Now()

End If         End If     Next lRow     Set OutApp = Nothing End Sub

当宏运行时(同样,第一次打开工作簿时),它检查工作表中的每一行以查看F列中是否有“ S”。如果不是,则检查E列中的日期是否等于今天的日期。如果是这样,则代码会将要发送的电子邮件(您可以根据需要修改)组合在一起。显示电子邮件,您可以在进行任何所需的更改后单击“发送”按钮。

此时,通过将“ S”指示符放置在F列中以及将电子邮件发送到G列的日期来更新工作表。

请注意,宏假定项目的名称在B列中。此信息用于汇总将通过电子邮件发送的消息。

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

链接:/ excelribbon-ExcelTipsMacros [点击此处在新的浏览器标签中打开该特殊页面]。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(474)适用于Microsoft Excel 2007、2010、2013和2016。