VBA макрос для рассылки писем из Excel через Outlook
Проблема
Возникла проблема с организацией отправки писем в список пользователей электронной почты в Excel. Кроме того, в каждой букве необходимо указать некоторые индивидуальные данные для каждого пользователя. Я попытался реализовать эту функцию с помощью макроса vba в Excel, который отправляет почту через почтовый профиль Outlook, настроенный на компьютере. Ниже мое решение.
Решение
Предположим, у нас есть файл Excel, содержащий следующие столбцы:
Электронная почта пользователя Полное имя Время последней смены пароля Статус учетной записи
В рамках своего задания я должен отправить письмо каждому пользователю из списка формы:
Тема: Статус аккаунта в домене winitpro.ru
Текст сообщения электронной почты: Уважаемый% FullUsername%
Ваш аккаунт в домене winitpro.ru -% status%
Время последней смены пароля:% pwdchange% Совет. Если вам нужно получить значение одного из атрибутов пользователя в Active Directory для учетных записей пользователей, вы можете использовать решение в функции Excel для получения данных пользователя из AD.
Создание нового макроса
Создадим новый макрос: вкладка «Вид» -> «Макросы». Укажите имя макроса send_email и нажмите кнопку Создать:
В открытом редакторе VBA вставьте следующий код (я снабдил его всеми необходимыми комментариями). Чтобы автоматизировать отправку электронных писем, я буду использовать функцию CreateObject («Outlook.Application») для создания и использования объекта приложения Outlook в сценарии.
Важный. Почтовый профиль Outlook должен быть установлен и настроен на компьютере, отправляющем электронные письма. Именно из этого почтового ящика (и адреса) будет осуществляться отгрузка.
Sub send_email()
Dim olApp как объект
Dim olMailItm как объект
Dim iCounter как целое число
Dim Dest как вариант
Dim SDest As String
объект письма
strSubj = «Статус аккаунта в домене winitpro.ru»
В случае ошибки Перейти в dbg
‘создать новый объект типа Outlook
Установите olApp = CreateObject («Outlook.Application»)
Для iCounter = 1 в WorksheetFunction.CountA (столбцы (1))
‘создать новый элемент (письмо) в Outlook
Установите olMailItm = olApp.CreateItem (0)
strBody = «»
useremail = Ячейки (iCounter, 1) .Значение
FullUsername = Ячейки (iCounter, 2) .Значение
Статус = Ячейки (iCounter, 4). Значение
pwdchange = Ячейки (iCounter, 3) .Значение
‘образует тело письма
strBody = «Уважаемый» & FullUsername & vbCrLf
strBody = strBody & «Ваша учетная запись в домене winitpro.ru» & Статус & vbCrLf
strBody = strBody & «Время последней смены пароля:» & pwdchange & vbCrLf
olMailItm.To = useremail
olMailItm.Subject = strSubj
olMailItm.BodyFormat = 1
‘1 — текстовый формат письма, 2 — формат HTML
olMailItm.Body = strBody
olMailItm.Send
‘следующую строку можно использовать для отладки текста электронного письма, комментируя предыдущее
«MsgBox strBody
Установите olMailItm = Nothing
Следующий iCounter
Установите olApp = Nothing
dbg:
«Показать ошибки, если есть
Если Err.Description «» Тогда MsgBox Err.Description
Конец подзаголовка
Этот файл Excel необходимо сохранить с расширением .xlsm (формат книги Excel с поддержкой макросов). Чтобы начать развертывание, выберите созданную процедуру (макрос) и нажмите кнопку «Выполнить.
Макрос будет последовательно перебирать все строки таблицы Excel, формировать и отправлять письмо на каждое электронное письмо из списка.