2016-03-21 3 views
0

У меня есть код, который отправляет определенное письмо в список рассылки на определенную дату. Диапазон («R19») имеет значение даты. Он работает, когда я нажал кнопку запуска. Но я не уверен, будет ли он работать автоматически при изменении значения даты.Отправка электронной почты из excel автоматически в зависимости от даты

Sub Send_Monthly() 

Set senddate = Worksheets("MONTHLY REMINDER").Range("R19") 

If senddate.Value = Date Then 

Set oApp = CreateObject("Outlook.Application") 
Set oEmail = oApp.CreateItem(olMailItem) 

Set colAttach = oEmail.Attachments 

oEmail.Close olSave 

oEmail.HTMLBody = "<html>Hello World.</htmlcenter>" 
oEmail.Save 
oEmail.To = "[email protected]" 
oEmail.Importance = 2 
oEmail.Subject = "REMINDER" & " " & Format(Now, "mmmm yyyy") 
oEmail.SentOnBehalfOfName = "[email protected]" 
oEmail.Display 

Set oEmail = Nothing 
Set colAttach = Nothing 
Set oAttach = Nothing 
Set oApp = Nothing 

End If 

End Sub 
+1

* работать автоматически при изменении даты валютирования * - место в [ 'Worksheet_Change'] (https:. // MSDN .microsoft.com/en-us/library/office/ff839775.aspx). –

ответ

0

Чтобы получить это запустить, когда определенные изменения клеток, поместить это в Worksheet_Change случае. На листе вы хотите запустить это на, поместите код, с некоторыми небольшими корректировками:

Sub Worksheet_Change(ByVal target As Range) 
Dim sendDate As Range 
Dim oApp As Object, oEmail As Object, olMailItem As Object 
Dim colAttach, olSave, oAttach 

Set sendDate = Worksheets("MONTHLY REMINDER").Range("R19") 
' I'm assuming you only want this to run if the value changes is `sendDate` 
If target.address <> sendDate.address Then Exit Sub 

If sendDate.Value = Date Then 

Set oApp = CreateObject("Outlook.Application") 
Set oEmail = oApp.CreateItem(olMailItem) 

Set colAttach = oEmail.Attachments 

oEmail.Close olSave 

oEmail.HTMLBody = "<html>Hello World.</htmlcenter>" 
oEmail.Save 
oEmail.To = "[email protected]" 
oEmail.Importance = 2 
oEmail.Subject = "REMINDER" & " " & Format(Now, "mmmm yyyy") 
oEmail.SentOnBehalfOfName = "[email protected]" 
oEmail.Display 

Set oEmail = Nothing 
Set colAttach = Nothing 
Set oAttach = Nothing 
Set oApp = Nothing 

End If 

End Sub 
+0

это может потерпеть неудачу, если другая ячейка изменена и совпадает с датой в «R19» –

+0

@ScottHoltzman - это то, что в силу макроса или как я сделал «целевую» часть? Я обновил это как 'If target.address <> sendDate.address Then Exit Sub' – BruceWayne

+0

, который работает сейчас. Я думаю: «Если Target.Address = $ R $ 19' в самом начале легче читать и следить и не выполняет ЛЮБОЙ код, если цель не соответствует ... но это может быть только предпочтительный стиль :) –

Смежные вопросы