Отправка книги или листа по электронной почте
Если вам часто приходится рассылать определенные книги или листы по электронной почте, то вы должны были заметить, что процедуру эту быстрой не назовешь. Если делать ее "классически", то надо:
- открыть почтовую программу (например 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
- Создание писем с помощью функции ГИПЕРССЫЛКА
Sub SendWorkbook()
ActiveWorkbook.SendMail Recipients:="vasya@pupkin.com", Subject:="Лови файлик"
End Sub
но возможно ли чтобы файл который отправлялся был в формате pdf и как нибудь убрать всплывающее окно где надо разрешать outlook отправлять письмо.
?
Что бы все в 1 клик ?
Подскажите пожалуйста, способом "Способом №3" можно решить следующую задачу ?
Имеется перечень контактов, также справа имеется столбец с числами (например, кол-во дней до определенного события),
необходимо:
1. Просмотр диапазона с числами на условие достижение числами определенного значения (например, 30 > x > 25)
2. При выполнении условия в п.1 Excel начинает формировать массовую рассылку, как это было сделано в Способе№3. Еще есть вариант
3. Вся конструкция макроса "Напоминалки" запускается после открытия файла.
Подскажите как в этом макросе прописать, чтобы он еще дополнительно в текст письма помимо текста, который подтягивает из ячейки вставлял и уже созданную подпись которая в Outlook/
Во втором способе есть только "Кому" а есть еще макрос на в "Копии"
Вопрос: можно сделать так чтобы документ без макроса и кнопки отправки?
Т.е. получатель получает вложение в котором уже нет кнопки отправить и соответственно макроса для отправки.
можно ли сделать чтобы в тело письма вставлялись только измененные после открытия ячейки и "шапка"?
Ну или может чтобы отправлялись шапка (первые две строки) и выделенный диапазон ячеек?
При отправке одного листа как вложения документ Excel называется "Книга1". Как сделать, чтобы было изначальное название?
Спасибо!
8)
Скажите , есть ли возможность в тело письма вставить диаграму которая находитса на одному с листов робочей книги
Есть ли возможность вставить частичные данные из я ячейки?
Поясню: в ячейке указана надпись типа "счет фактура(или товарная накладная) №**** от дд.мм.гг". Необходимо чтобы в теме письма указывались данные из этой ячейки в виде "№**** от дд.мм.гг". Без указания типа документа.
Есть ли возможность к этим данным из ячейки добавить через макрос свои? Типа этого: "№**** от дд.мм.гг(из ячейки), филиал такойто(свои данные)".
Есть ли возможность в макросе вставить шаблон с произвольным текстом, что бы в теле письма отображался этот текст и в этом тексте дата в виде кода(отправки письма, т.е. сегодняшняя)?
Заранее спс за помощь.
Необходимо:
Создать одновременно (не отправляя никому автоматически) несколько писем с разными Кому, Телом письма. Я понимаю, что в цикле вызывать, но что-то пока не получается ((
Подскажите, пожалуйста, может можно как-то реализовать такую задачу:
Есть Книга Exel с несколькими Листами. Необходимо одним получателям отправить один набор листов, другим - другой.
Только начинаю постигать просторы Excel-я. Прошу помощи.
Задача: отправить часть таблицы по почте
Вводные: почтовая программа EmClient
Вопрос: Как изменить код ,
что бы Excel использовал EmClient вместо Outlook ?
Спасибо
1) а у меня в Универсальном коде выдает ошибку на строке Set OutApp=CreateObject("Outlook.Application")
Ошибка с текстом: 429
ActiveX component can't creat object
Почему так происходит?
2) как можно в способе 2 вместо адреса в коде указать ссылку на ячейку на листе книги?
Указывала
.SendMail Recipients = Range ("A2").Value, Subject= Range ("A3").Value
В ячейке А2 - адрес.
В ячейке А3 - тема
Но тоже выдает ошибку " в списке адресатов указано неизвестное имя"
В файле (например) "Шаблон"есть выпадающий список. Как только я выбираю в списке " Уведомить тов. Иванова посмотреть файл №1".
Товарищу Иванову уходит письмо на Яндекс Почту с содержанием "Посмотри файл №1". При выборке остальных позиций списка отправка письма не происходит.
Далее на другом листе того же файла "Шаблон" я выбираю в списке " Уведомить тов. Петрова посмотреть файл №2".
Товарищу Петрову уходит письмо на Яндекс Почту с содержанием "Посмотри файл №2". При выборке остальных позиций списка отправка письма не происходит.
Помогите создать движок.
Есть около 60 листов.
Есть таблица Название листа - адрес E-Mail
Как разослать листы по соответствующим адресам? Help!
Подскажите, может ошибка где?
Не срабатывает удаление формул из листа, я её может не ту переменную поставил?
Пользуюсь способом номер 2. Подскажите пожалуйста если на отправляемом листе информация отфильтрована с использованием фильтров, возможно ли сделать так чтобы получатель получал уже только отфильтрованную информацию. Сейчас получатель получает полностью лист и при удалении фильтров видит информацию которую он видеть не должен . Прочитал всю данную тему, ответа не нашел.
Спасибо за помощь.
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