У Доменика есть рабочий лист, в котором указаны сроки выполнения проектов в столбце 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

Когда макрос запускается (опять же, когда книга открывается в первый раз), он проверяет каждую строку на листе, чтобы увидеть, есть ли буква «S» в столбце F.

Если нет, то он проверяет, совпадает ли дата в столбце E с сегодняшней датой. Если это так, то код объединяет сообщение электронной почты (которое вы можете изменить по своему желанию) для отправки. Отображается электронное письмо, и вы можете нажать кнопку «Отправить» после внесения любых желаемых изменений.

В этот момент рабочий лист обновляется путем размещения индикатора «S» в столбце F и даты отправки электронного письма в столбец G.

Обратите внимание, что макрос предполагает, что имя проекта находится в столбце B.

Эта информация используется для составления сообщения, которое будет отправлено по электронной почте.

_Примечание: _

Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.

link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера].

ExcelTips — ваш источник экономичного обучения Microsoft Excel.

Этот совет (474) применим к Microsoft Excel 2007, 2010, 2013 и 2016.