Если после выполнения макроса необходимо отправить в качестве вложения получившийся документ Excel, можно использовать следующий код. Он создаёт письмо с нужным перечнем адресатов в полях «Кому» и «Копия», с указанной темой, текстом и прикреплённым Excel файлом. Остаётся толкьо дописать письмо в случае необходимости и нажать кнопку «Отправить».
Dim OutlookApp As Object, SM As Object Set OutlookApp = CreateObject("Outlook.Application") Set SM = OutlookApp.CreateItem(olMailItem) 'SM.SentOnBehalfOfName = "mail@example.ru" 'Поле "От", если нужен другой отправитель SM.To = "mail@example.ru" 'Поле "Кому" SM.CC = "mail@example.ru" 'Поле "Копия" SM.Subject = "Тема письма" On Error Resume Next SM.Body = "Текст письма" SM.Attachments.Add ("C:\Test.xls") 'Адрес вложения SM.Display Set SM = Nothing Set OutlookApp = Nothing |
Если же нужно отправить письмо в фоновом режиме, без отображения и необходимости самостоятельно нажимать кнопку «Отправить», то вместо SM.Display
нужно вставить следующий код:
SM.Send OutlookApp.Quit |
Чтобы вместо простого текста в теле письма было отформатированное содержимое можно воспользоваться вместо SM.Body
следующее:
SM.HTMLBody = "<html><body><div>" & Text & "</div></body></html>" |
Чтобы создать письмо с подписью, которая ставится по умолчанию, можно прибегнуть к следующему коду:
Sub cbSendMail_Click(FileName) Application.DisplayAlerts = False FullFilePath = ThisWorkbook.Path & "\" & FileName & ".xlsx" Dim OutlookApp As Object, SM As Object Set OutlookApp = CreateObject("Outlook.Application") Set SM = OutlookApp.CreateItem(olMailItem) SM.To = "mail@example.ru" SM.CC = "mail@example.ru" SM.Subject = "Название темы" & FileName On Error Resume Next 'в этом случае открывается письмо 'с подписью той которая по умолчанию в Outlooke SM.Body = Activedocument.Content SM.HTMLBody = Activedocument.Content.Text If Dir(FullFilePath) <> "" Then SM.Attachments.Add (FullFilePath) 'Адрес вложения Else MsgBox "Файл для вложения не найден: " & Chr(13) & FullFilePath End If SM.Display SM.HTMLBody = "Добрый день!" & SM.HTMLBody Set SM = Nothing Set OutlookApp = Nothing End Sub |
Ещё по теме
Источник: Клуб ПРОграммистов — Отправка почты макросом Excel
Здраствйуте!
Очень полезный код, но под Windows 7 возникает ошибка: «ActiveX component can’t create object».
Сталкивались Вы с такой проблемой?
Тоже Windows 7, но такой ошибки не возникало. Поискал в Интернете, может поможет замена строк
на следующий код
Если поможет, то, пожалуйста, отпишитесь:)
Доброго времени суток. Я в макросах полный ноль. Я понял что он отправляет целую книгу., а как сделать чтоб отправлял листы в книге( только так чтоб я прописывал название листов). Благодарю
Можно сначала создать новую книгу из нужных листов (http://opennotes.ru/knowledge/vba-knowledge/novaya-kniga-excel-iz-listov-staroj/ ) а уже затем отправлять её.
У меня большая база в эксель. У меня естьмакрос который разбивает по городам. Как отправлять без темы письма и текста я знаю(нашел), но в данный момент надо чтоб были эти фунцкия. Вот есть города, мне надо каждый лист отправлять отдельно. Получается 35 листов и это надо делть 2-3 раза в день. Если надо могу пример скинуть. Помогите пожалуйста
Соответственно сохраняете листы в 35 файлов, затем 35 писем в которые эти файлы вкладываете. И отправляете. Может скинуть пример, по возможности посмотрю.
Добрый день! А если надо отправить файл обьёмом более 20МгБ? У меня они не прикрепляются.
Файлы большего объёма в принципе нельзя по почте отправить. Только загрузить на какой-нибудь сайт типа Dropbox и отправить на него ссылку.
Шикарный код, спасибо
Отличный пример. VB не очень глубоко знаю, но здесь всё понятно!
Спасибо!
Никогда не пишу комментарии, но тут не удержался — КОД ОФИГЕНЕН!!! Спасибо огромное!!!
Здравствуйте, подскажите пожалуйста, как дописать этот код, что бы можно было указать учетную запись, с которой отправляются письма? (У пользователя 2 почтовика в луке, для определенной рассылки необходимо выбрать не основной)
Заранее благодарен.
Попробуйте использовать следующие параметры:
или
Environ("username")
День Добрый!
Не получается отправить письмо с не основного адреса.
пробовал оба варианта. не совсем понятно в какое место надо вставлять данные пункты
Это можно сделать с помощью параметра
SM.SentOnBehalfOfName = "mail@example.ru"
Добрый день, а подскажите, пожалуйста, как дополнить макрос, чтобы он дополнительно в письме отправлял вложенный через гиперссылку файл?
Поясните, пожалуйста, точнее, что вы хотите: чтобы в письме была гиперссылка или чтобы какой-то файл по гиперссылке автоматически скачивался и вкладывался в письмо? Если первое, то нужно использовать HTMLBody и обычное оформление гиперссылки в HTML. Если второе, то это весьма нетривиальная задача, выходящая за рамки данной статьи.
Здравствуйте!
Как сделать, чтобы в поле «Кому» записывалось сразу несколько e-mail адресов, которые предварительно были выбраны в таблице?
Попробовал
SM.To = ActiveCell
но это работает только с одно выделенной ячейкой.
Попробуйте такой вариант:
Всем привет!
Очень полезный код, спасибо большое!
Помогите пожалуйста добавить еще второго получателя в SM.To :
SM.To = «mail@example.ru» + как добавить второго ?
Пробовал через and и ;, но не получается…
У меня получилось добавить второго
А если не через оутлук отправлять????
Скажем, у пользователя почта на мэйле или гугле???
Как тогда?
Outlook — это почтовый клиент, его можно настроить на работу и с mail.ru, и с gmail.com.
Код с «создать письмо с подписью, которая ставится по умолчанию» это то, что я искал!
Только подскажите, как отправить два или три прикрепленных к письму файлов?
Спасибо.
Просто несколько раз повторите строку
SM.Attachments.Add (FullFilePath)
, вместо FullFilePath подставляя каждый раз путь к нужному файлу.Всем привет!
Все замечательно!
Подскажите как прикрепить все файлы к письму находящиеся на сетевой в папке с указанным расширением .htm ; .pdf ; без него.
Спасибо.
Код для поиска всех файлов с папке с определённым расширением можете посмотреть на странице Полезные команды VBA в разделе Поиск файлов в папке. Этот цикл нужно добавить в код, формирующий новое письмо. Имейте ввиду, что размер файлов, которые можно отправить, ограничен!
Александр, да можно. Только для этого либо Excel должен быть постоянно запущен, либо при открытии определенного файла будет идти проверка текущей даты и если дата больше-равна требуемой — то вызов кода отправки письма.
Мне нужно отправить анкету с моими данными В каждую строку я внес свои данные, а как теперь мне отправить сообщение через эксель? У меня в семье есть компьютерщик, но он в отъезде, а мне нужно отправить через эксель письмо Посоветйуте с чего нужно начинать ?
Не совсем понятна ваша проблема. Может вам вообще не сюда, т.е. не нужен скрипт, а достаточно нажать Файл -> Сохранить и отправить -> Отправить по электронной почте -> Отправить как вложение (в зависимости от версии Офиса путь может отличаться).
Код шикарен и прост, долго искал код отправки сообщения с подписью
Но, подскажите пожалуйста какую строчку кода надо прописать чтоб текст сообщения (Body) ссылался на ячейку на активном листе, и желательно чтобы текст можно было отформатировать
‘SM.HTMLBody = «Добрый день!» & SM.HTMLBody’
Попробуйте добавить между «Добрый день!» и SM.HTMLBody ссылку на ячейку на подобии ActiveSheet.Range(«A1»).Value