Отправка книги или листа по электронной почте
Если вам часто приходится рассылать определенные книги или листы по электронной почте, то вы должны были заметить, что процедуру эту быстрой не назовешь. Если делать ее "классически", то надо:
- открыть почтовую программу (например Outlook)
- создать новое сообщение
- вбить туда адрес, тему и текст
- прикрепить к сообщению файл (не забыть!)
- нажать кнопку Отправить
На самом деле почту можно легко отправлять прямо из Excel кучей разных способов. Поехали...
Способ 1. Встроенная отправка
Если у вас еще старый добрый Excel 2003, то все просто. Открываете нужную книгу/лист и выбираете в меню Файл - Отправить - Сообщение (File - Send To - Mail Recipient). Откроется окошко, в котором можно выбрать один из двух вариантов отправки:
В первом случае текущая книга будет добавлена в сообщение как вложение, во втором - содержимое текущего листа попадет прямо в текст сообщения как текстовая таблица (без формул).
Кроме этого в меню Файл - Отправить (File - Send To) есть еще несколько более экзотических вариантов отправки:
- Сообщение (для ознакомления) (Mail Recipient for Review) - отправляется вся книга целиком и при этом для нее включается отслеживание изменений, т.е. начинает явно фиксироваться - кто, когда и в каких ячейках какие изменения производил. Отобразить внесенные изменения потом можно в меню Сервис - Исправления - Выделить исправления (Tools - Track changes - Highlight changes) или на вкладке Рецензирование - Исправления (Reveiw - Track Changes) Выглядеть это будет примерно так:
Цветные рамочки помечают изменения, внесенные в документ (для каждого пользователя - свой цвет). При наведении мыши всплывает похожее на примечание окошко с подробным описанием кто, что и когда изменил в этой ячейке. Весьма удобно для рецензирования документов, когда, например, вы правите отчет своих подчиненных или шеф правит ваш. - По маршруту (Routing Recipient) - сообщение, куда будет вложена ваша книга, отправится по цепочке получателей, каждый из которых автоматически будет пересылать его дальше, как эстафетную палочку. При желании можно задать, чтобы в конце цепочки сообщение вернулось к вам обратно. Можно включить режим отслеживания изменений, чтобы видеть правки, внесенный каждым человеком в цепочке.
В новых Excel 2007/2010 ситуация немного другая. В этих версиях для отправки книги по почте нужно выбрать кнопку Офис (Office Button) или вкладку Файл (File) и команду Отправить (Send). Далее, пользователю предлагается набор вариантов отправки:
Обратите внимание на то, что в новых версиях исчезла возможность отправки отдельного листа книги, вставленного в тело письма - как это было в Excel 2003 и старше. Осталась только возможность отправить весь файл целиком. Зато появилась полезная возможность отправлять в известном формате PDF и менее известном XPS (аналог PDF, но не требует Acrobat Reader для чтения - открывается прямо в Internet Explorer). Команду отправки книги для ознакомления можно вытащить как дополнительную кнопку на панель быстрого доступа через Файл - Параметры - Панель быстрого доступа - Все команды - Отправить на проверку (File - Options - Quick Access Toolbar - All Comands - Send for Review).
Способ 2. Простые макросы для отправки
Отправка макросом гораздо проще. Открываем редактор Visual Basic через меню Сервис - Макрос - Редактор Visual Basic (Tools - Macro - Visual Basic Editor), вставляем новый модуль в меню Insert - Module и копируем туда текст этих двух макросов:
Sub SendWorkbook() ActiveWorkbook.SendMail Recipients:="vasya@pupkin.com", Subject:="Лови файлик" End Sub Sub SendSheet() ThisWorkbook.Sheets("Лист1").Copy With ActiveWorkbook .SendMail Recipients:="vasya@pupkin.com", Subject:="Лови файлик" .Close SaveChanges:=False End With End Sub
После этого скопированные макросы можно запустить в меню Сервис - Макрос - Макросы (Tools - Macro - Macros). SendWorkbook отправляет на заданный адрес всю текущую книгу, а SendSheet - Лист1 как вложение.
При запуске макроса Excel будет обращаться к Outlook, что вызовет появление вот такого сообщения безопасности на экране:
Дождитесь, пока кнопка Разрешить станет активной и нажмите ее, чтобы подтвердить свою отправку. После этого созданные автоматически сообщения будут помещены в папку Исходящие и отправятся получателям при первом запуске Outlook или, если он у вас запущен, непосредственно сразу же.
Способ 3. Универсальный макрос
А если хочется отправлять не текущую книгу, а любой другой файл? И текст сообщения тоже неплохо было бы задать! Предыдущие макросы здесь не помогут, поскольку ограничены возможностями самого Excel, но можно создать макрос, который будет из Excel'я управлять Outlook'ом - создавать и заполнять окно нового сообщения и отправлять его. Макрос выглядит так:
Sub SendMail() Dim OutApp As Object Dim OutMail As Object Dim cell As Range Application.ScreenUpdating = False Set OutApp = CreateObject("Outlook.Application") 'запускаем Outlook в скрытом режиме OutApp.Session.Logon On Error GoTo cleanup 'если не запустился - выходим Set OutMail = OutApp.CreateItem(0) 'создаем новое сообщение On Error Resume Next 'заполняем поля сообщения With OutMail .To = Range("A1").Value .Subject = Range("A2").Value .Body = Range("A3").Value .Attachments.Add Range("A4").Value 'команду Send можно заменить на Display, чтобы посмотреть сообщение перед отправкой .Send End With On Error GoTo 0 Set OutMail = Nothing cleanup: Set OutApp = Nothing Application.ScreenUpdating = True End Sub
Адрес, тема, текст сообщения и путь к вложенному файлу должны быть в ячейках A1:A4 текущего листа.
Ссылки по теме
- Групповая рассылка почтовых сообщений из Excel с помощью надстройки PLEX
- Макросы для отправки почты из Excel через Lotus Notes от Dennis Wallentin
- Что такое макросы, куда вставлять код макроса на Visual Basic
- Создание писем с помощью функции ГИПЕРССЫЛКА
Вот сегодня наконец-то сделал то, что хотел - отправку почту с макроса через The Bat! Хочу заметить, что работает только с The Bat! начиная с версии 4.2.9.1.
Вот исходный текст:
Комментарии к написанному:
mailbox_1 - ящик отправителя;
mailbox_1 - ящик получателя;
в переменной tema нужно указывать все без пробелов (то, что идет после пробела - отсекается)
Это конечно не идеал, поскольку это как-бы командная строка, но зато работает! Если у кого-то будут замечания или предложения, то пишите на мыло:
код для отправки писем ведь давно написан и опубликован:
Заранее большое спасибо!!.
что-то типо вот этого...
Но так и не разобрался, как в body сделать перенос на новую строку? пока получается все сплошным текстом.
Антивирь стоит, безопасность макросов низкая.
excel 2010, win7x64
уже всё пересмотрел, но найти где отключается не смог....
Application.DisplayAlerts = False
Выходит что реально никак, в аутлуке все предупреждения отключены, в екселе тоже. В макросе Application.DisplayAlerts = False. Антивирусник установлен (поскольку читал о том что если нет антивиря тоже влияет). Что ему еще не хватает для самостоятельной рассылки, не понимаю)))
Чтоб при отправке в письме указывалась гиперссылка.
А можете ещё подсказать, как задать отметку «К исполнению» - для получателя, и чтобы с уточнением времени ответа? И также интересует, как поставить отметку с важностью письма.
Возможные значения можно посмотреть тут:
свойство .Importance задает важность (например строка ".importance = 2" проставит отметку "Высокая важность")
А можно ли отправить письмо для множества адресов через
Можете виложыть скрипт, о котором вы писали више?
пример с отправкой выделенного диапазона выложил здесь:
Будут вопросы - пишите.
Удачи!
При отправке одного листа как вложения документ Excel называется "Книга1". Как сделать, чтобы было изначальное название?
Спасибо!
Это просто класс, все работает, как часики.
Только один вопрос, на данный момент я сделал что бы файл открывался в определенное время, обновлял данные, сохранял файл в архив, отправлял по почте и закрывался сам, но он отправляет файл целиком и соответственно когда я открываю файл он все делает и опять закрывается
можно ли в третьем примере отправлять выбранные по условию данные, скопированные из этой же книги?
Подскажите, нигде в интернете ничего и близко не могу найти.
Составляю письмо с помощью VBA
в тело сообщения пишу текст например:
.TextBody = "ТЕЛО СООБЩЕНИЯ"
вопрос: можно ли текст каким либо образом форматировать?
например: сделать слово ТЕЛО полужирным, а СООБЩЕНИЯ оставить нормальным.
Подскажите, можно ли это как-то реализовать? Заранее благодарен.
Если еще актуально, предлагаю следующий вариант форматирования текста в теле письма:
.HTMLBody = "<p style='font-family:Tahoma;font-size:12'>" & "Текст со шрифтом Tahoma, размер 12 " & vbCrLf & _
"<p style='font-family:Kozuka Mincho Pro H;font-size:16'>" & "Текст со шрифтом Kozuka Mincho Pro H, размер 16 "
------------------------------
работает в 10 Офисе
Код рабочий, только с ошибками, скобочек ) не хватает. Отправляет письма безо-всяких запросов.
Работает на всех версиях Excel.
Отредактировал, теперь код верный.
у нас в одном файле лежат эл. адреса на эти эл. адреса нужно отправить отсканированный лист но каждую неделю листы меняются
Пожалуйста, помогите!
Когда отправляю лист по 2-ому способу, записанный на листе макрос (для защиты ячейки) не работает у получателя. Код защиты для ячейки приведен ниже:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [S2:AG63]) Is Nothing Then _
With Application: .EnableEvents = 0: .Undo: .EnableEvents = -1: End With
End Sub
Подскажите, пожалуйста, как заменить в макросе почтовый клиент Outlook на Windows Live:
Set OutApp = CreateObject("Outlook.Application" 'запускаем Outlook в скрытом режиме
Подскажите пожалуйста, как установить отчет о доставке и о прочтении, да и подпись к письму не мешало бы!
Спасибо!
почтовый клиент Mozilla Thunderbird, макрос работает отлично, есть ли возможность запускать почтовое приложение в фоновом режиме, или например закрывать клиента после отправки? Нагуглил разные варианты работы VBA c Windows приложениями используя API, но знаний не хватает применить. А еще в треде был вопрос о присвоении файлу имени листа при отправке (вместо Книга1), возможно ли это?
Помогите, кто может, я не сильно разбираюсь в VBA.
Есть задача отправлять макросом вложение (книгу или лист) по почте Lotus.
Для Outlook вроде все понятно, но в моем случае, по способу 2 мне не хватает только Body.
Можно ли решить эту проблему?
Так видимо здесь и не дождусь ответа (((
Но поиск в гугле по первой ссылке
Поможет?
можно ли отправлять письма с помощью макроса не на адрес *@*.com, а на группу рассылки, созданную в Outlook?
Спасибо!
Пытаюсь облегчить себе работу с помощью третьего макроса, все работает.
Подскажите что мне необходимо исправить в строчке:
".Attachments.Add Range("A4").Value"
чтобы отправлялся активный лист(отредактированный) с активной книги(то есть книги где макрос)???
Заранее спасибо за помощь!
Подскажите пожалуйста что необходимо изменить в строке
".Attachments.Add Range("A4";).Value"
чтобы не путь к вложению указывать, а просто вкладывать в новое сообщение активный файл.
Заранее спасибо.
поменял эту строку на такую
.Attachments.Add ThisWorkbook.FullName
Может быть кому-нибудь пригодится
Спасибо! Все работает, но интересует, что необходимо дописать в макросе для переформатирования перед отправкой в формат XPS
А потом прикреплять к письму сохраненный файл как вложение.
Подскажите, пожалуйста, как в 3-м способе сделать так, чтобы при создании письма из Ехсель с помощью VBA в письмо автоматически добавлялась подпись, та которая настроена у сотрудника для указания при создании новых сообщений. Заранее спасибо!!!
Такой вопрос, можно ли во втором макросе (отправка листа) задать тело сообщения каким либо способом?
Спасибо.
Большое спасибо за материал.
Использую второй макрос, хотелось бы знать можно ли как-то в тело письма вставить таблицу с активного листа, и желательно с сохранением форматирования (граница, заливка и т п).
Подскажите пожалуйста, как нужно изменить строку ссылающиеся на документ, чтобы прикрепить несколько документов из одной папки
Подскажите пожалуйста, как отправить диапазон ячеек на основе этого примера
Надо просто сформировать имя для отправки, которое состоит из перечня адресов. Это можно сделать простым перечислением ячеек, где расположены адреса:
Out_Mail = Cells(5, 5) & "; " & Cells(6, 5) & "; " & Cells(7, 5)
или, если адресов много, сделать цикл. К примеру:
-------------------------------
Out_Mail = ""
For i = 5 To 7
Out_Mail = Out_Mail & Cells(i, 5) & "; "
Next i
-------------------------------
В строке отправки ставим .to = Out_Mail
пример здесь:
Удачи!
Большое спасибо за ответ.
Подскажите,пожалуйста ещё такие моменты:
- Как отправлять ссылки в теле письма на основе Вашего примера?
- Можно ли давать команду на отправку с другого листа книги?
Заранее благодарю.
Отправлять ссылки можно. Второй вопрос не совсем понял, что находится на втором листе?
Пример здесь:
Я имел ввиду - как сделать, чтобы отправлять диапазон расположенный к примеру на Лист1, а кнопку для отправки этого диапазона разместить на Лист2.
Для этого надо просто активировать лист, где находится фрагмент таблицы, а в конце, по желанию, скакнуть обратно.
См здесь:
Помогите пожалуйста составить макрос или через УФ. Суть такова:
Есть к примеру в ячейке "В2" Город получатель(города разные)...необходимо что бы при активации(как при гиперссылке) данного города отправлялось письмо с текстом и номером индекса(индексы тоже разные), который находится в ячейке "А1", либо при вводе текста в ячейке "С1".."Запрос"...автоматически уходило письмо в город получатель("B2" )с текстом и номером индекса("A1").
Это можно как-то реализовать?
Заранее спасибо!
Простой вариант реализации такой задачи макросом здесь:
Удачи!
Я имел ввиду - как сделать, чтобы отправлять диапазон расположенный к примеру на Лист1, а кнопку для отправки этого диапазона разместить на Лист2.
Не понял, чем "Окно сообщения" принципиально отличается от драфта письма?
Берем классический пример Способ 3. Универсальный макрос (см выше), в строке вложения пишем:
.Attachments.Add ActiveWorkbook.FullName
Строку .Send меняем на .Display. Запускаем макрос, пишем нужный текст и отправляем письмо.
Или с макросом №2 что-то не так, или с моим пк
Письмо пришло - отправляла несколько раз, все ОК, но в почтовике в "отправленных" нет.
Не подскажите что это может быть? офис 2010
Нашел на просторах сети вот такой ккод
Подскажите пожалуйста.
не получилось вставить в теги код, все переносы убирает.
Очень понравился макрос из шапки
Sub SendSheet()
ThisWorkbook.Sheets("Лист1";).Copy
With ActiveWorkbook
.SendMail Recipients:="vasya@pupkin.com", Subject:="Лови файлик"
.Close SaveChanges:=False
End With
End Sub
Помогите, пожалуйста, внести некоторые коррективы:
Необходимо настроить отправку в формате XPS
Необходимо настроить отправку получателям, чьи адреса прописаны в определенных клетках
Необходимо настроить отправку копии получателям, чьи адреса прописаны в определенных клетках
В идеале - настроить отправку не самого файла, а в виде вложенной в письмо таблички с диапазоном (A1:L16)