Автоматическая отправка писем из Excel через Outlook используя VBA

Иногда, в процессе трудовой деятельности, приходится периодически отправлять различного рода сообщения однотипного характера по списку рассылки. Например, напоминание о предоставлении показаний приборов от разных абонентов, необходимо запрашивать каждое 25-тое число месяца. Это очень муторно и требует каждый раз создавать сообщение, вспоминать адреса электронной почты абонентов, набирать текст сообщения, тему. В принципе это занимает не так много времени, но зачем отвлекаться на то, что можно сделать автоматически использую автоматическую рассылку писем из Excel через Outlook?

В статье «Отправить почту через Excel с помощью макроса» мы разработали функцию, которая создает новое сообщение Outlook из экселя:

Function CreateNewMail(email As String, tema As String, text As String, Optional put_file As String)
'' Создать объект Outlook
Set Mail = CreateObject("outlook.application")
'' Создать новое сообщение
With Mail.CreateItem(olMailItem)
.To = email'' адрес электронной почты
.body = text'' текст сообщения
.Subject = tema '' тема сообщения
.Display '' показать окно сообщения перед отправкой
'' прикрепить файл (при необходимости)
If Len(put_file) <> 0 Then .Attachments.Add put_file
End With
End Function

Для автоматической рассылки писем из excel через outlook необходимо данную функцию доработать, удалив из оператора With строку .Display чтобы окно созданного сообщение не отображалось лишний раз не отвлекая, от более важных дел. А также в конце оператора With добавив строку .Send. Соответственно получится функция следующего вида:

Function CreateNewMail(email As String, tema As String, text As String, Optional put_file As String)
'' Создать объект Outlook
Set Mail = CreateObject("outlook.application")
'' Создать новое сообщение
With Mail.CreateItem(olMailItem)
.To = email'' адрес электронной почты
.body = text'' текст сообщения
.Subject = tema '' тема сообщения
'' прикрепить файл (при необходимости)
If Len(put_file) <> 0 Then .Attachments.Add put_file
.Send '' отправить сообщение
End With
End Function

Теперь необходимо объявить глобальную переменную Vremya для запуска и остановки таймера выполнения макроса рассылки писем из excel через outlook.

Public Vremya '' объявляем глобальную переменную времени, в которое необходимо выполнить макрос

Создаем макрос рассылки писем:

'' отправка сообщения в указанное время
Sub otMessage()
Vremya = Now + TimeSerial(0, 1, 0)'' к текущему времени прибавить одну минуту
Application.OnTime Vremya, "newMessage"'' выполнять отправку сообщения через каждую минуту
End Sub

Переменная Vremya может иметь любое значение вида «15.05.2020 13:23:14». Присваиваем ей значение текущего времени (получая его вызвав встроенную в vba функцию Now) прибавляя к нему одну минуту используя TimeSirial, синтаксис которого приведен ниже:

TimeSerial(ЧАСЫ, МИНУТЫ, СЕКУНДЫ)

На итог переменная Vremya равна текущей дате и времени плюс одна минута.

Дальше используя таймер Application.OnTime ЧЕРЕЗ_СКОЛЬКО_ЗАПУСТИТЬ_МАКРОС, ФУНКЦИЯ запускаем выполнение функции newMessage(). Здесь вводится дополнительная функция newMessage() ввиду невозможности передачи атрибутов используя OnTime.

Сама же функция newMessage() представляет собой следующее:

Function newMessage()
'' вызываем функцию (с передачей необходимых параметров) отправки нового сообщения
Message = CreateNewMail("planero.ru@yandex.ru;", "текст сообщения", "тема сообщения")
'' прекратить отправку сообщений через каждую минуту
Application.OnTime Vremya, "newMessage", , False
End Function

Первым делом вызываем функцию CreateNewMail с передачей ей необходимых атрибутов: адреса электронной почты, текста сообщения, темы сообщения. И после выполнения автоматической отправки письма останавливаем ранее запущенный таймер OnTime в процедуре otMessage.

В итоге получилось реализовать в vba автоматическую рассылку писем из excel через outlook, которая избавит от необходимости отправки однотипно-повторяющихся сообщений. А изменив переменную Vremya под себя, можно сделать рассылку в нужное вам время.

Сам макрос можно написать самому, а можно скачать уже готовый вариант по ссылке.

Поделись с друзьями:
Комментарии 2

© планеро.ru