Отправка книги или листа по электронной почте
Если вам часто приходится рассылать определенные книги или листы по электронной почте, то вы должны были заметить, что процедуру эту быстрой не назовешь. Если делать ее «классически», то надо:
- открыть почтовую программу (например 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
- Создание писем с помощью функции ГИПЕРССЫЛКА
I recieved an excel workbook with data and I added a macro to it with a button that activates the macro. I have to return the excel workbook with the macro by email. I added the workbook to the email as an attachment. I wanted to check the attached file to see if everything is ok and I saw that the macro isn’t there.
The excel file is macro enabled.
How should this be done? Thank you.
asked Dec 16, 2013 at 10:54
2
Save it as .XLSM before sending, it is working with small test. you can specify the workbook name also if more than one workbook is open.
Sub marco()
With ActiveWorkbook.Sheets(1)
Range("a21").Select
ActiveCell.Formula = "=sum(a2:a20)"
End With
ActiveWorkbook.SaveAs _
"C:Documents and SettingsDesktopfile.xlsm", FileFormat:=52
ActiveWorkbook.SendMail Recipients:="abc@xyz.com"
End Sub
answered Dec 16, 2013 at 12:32
Punith GPPunith GP
6904 gold badges11 silver badges33 bronze badges
0
Skip to content
На чтение 3 мин. Просмотров 4.9k.
Что делает макрос: Самую основную задачу можно выполнить с помощью автоматической отправки по электронной почте. В примере кода показано, активная рабочая книга отправляется двум
получателям электронной почты в качестве вложения.
С помощью команды Sendmail, вы можете отправлять простые сообщения электронной почты непосредственно из Excel. Тем не менее, команда SendMail не столь надежна, как автоматизация Outlook. SendMail не позволяет прикреплять файлы или использовать CC и BCC поля в электронной почте.
Содержание
- Как макрос работает
- Код макроса
- Как этот код работает
- Как использовать
Как макрос работает
Так как этот код будет работать с Excel, необходимо установить ссылку на объект Microsoft Outlook. Мы можем установить ссылку, открыв редактор Visual Basic в Excel и выбрав Tools➜ References. Прокрутите вниз, пока не найдёте запись Microsoft Outlook XX библиотеки объектов, где XX это ваша версия Outlook. Установите флажок рядом с записью.
Код макроса
Sub OtpravilFailPoEmail() 'Шаг 1: Объявляем переменные Dim OLApp As Outlook.Application Dim OLMail As Object 'Шаг 2: Откройте Outlook, чтобы создать новое сообщение Set OLApp = New Outlook.Application Set OLMail = OLApp.CreateItem(0) OLApp.Session.Logon 'Шаг 3: Постройте сообщение и отправьте With OLMail .To = "admin@datapigtechnologies.com; mike@datapigtechnologies.com" .CC = "" 'получатель/и копии .BCC = "" 'получатель/и скрытой копии .Subject = "Тема письма" .Body = "Образец файла прилагается" .Attachments.Add ActiveWorkbook.FullName .Display 'Замените на Send, если нужно сразу отправить End With 'Шаг 4: Очистка памяти Set OLMail = Nothing Set OLApp = Nothing End Sub
Как этот код работает
- Шаг 1 сначала объявляет две переменные. OLApp — это объектная переменная, которая предоставляет Application Outlook . OLMail — это объектная переменная, которая содержит почтовый элемент.
- Шаг 2 активирует Outlook и начинает новый сеанс. Обратите внимание, что мы используем OLApp.Session. Войдите в систему, чтобы войти в текущий сеанс MAPI (Messaging Programming Interface Application) с учетными данными по умолчанию. Он также создает почтовое сообщение. Это эквивалентно выбору кнопки «Новое сообщение» в Outlook.
- Шаг 3 строит профиль нашего почтового отправления. Это включает в себя CC, BCC получателей, предмет, тему и вложения. Этот шаг отмечает, что получатели вводятся в кавычки, и отделяются точкой с запятой. Стандартный синтаксис для вложения является Attachments.Add «Путь к файлу». Вот в этом коде, мы указываем путь к файлу текущей рабочей книги с синтаксиса ActiveWorkbook.Fullname. Это устанавливает текущую рабочую книгу как вложение для сообщения электронной почты. Когда сообщение было построено, мы используем метод .Display для просмотра электронной почты. Мы можем заменить .Display с .Send автоматически отправлять по электронной почте без просмотра.
- Высвобождение объектов, присвоенных нашим переменным, как правило, хорошая практика. Это снижает вероятность каких-либо проблем, вызванных объектами, которые могут остаться открытыми в памяти.
Как использовать
Для реализации этого макроса, вы можете скопировать и вставить его в стандартный модуль:
- Активируйте редактор Visual Basic, нажав ALT + F11.
- Щелкните правой кнопкой мыши имя проекта / рабочей книги в окне проекта.
- Выберите Insert➜Module.
- Введите или вставьте код.
- Интернет
- Рассылка почты
Пример макроса, отправляющего письма со вложениями из Excel через почтовый клиент Outlook:
Sub Отправить_Письмо_из_Outlook() 'отправляем письмо без вложений res = SendEmailUsingOutlook("name@domain.ru", "Текст письма 1", "Тема письма 1") If res Then Debug.Print "Письмо 1 отправлено успешно" Else Debug.Print "Ошибка отправки" 'отправляем письмо с 1 вложением attach$ = ThisWorkbook.FullName ' прикрепляем текущий файл Excel res = SendEmailUsingOutlook("name@domain.ru", "Текст письма 2", "Тема письма 2", attach$) If res Then Debug.Print "Письмо 2 отправлено успешно" Else Debug.Print "Ошибка отправки" 'отправляем письмо с несколькими вложениями Dim coll As New Collection ' заносим в коллекцию список прикрепляемых файлов coll.Add "C:Documents and SettingsAdminРабочий столTyres.jpg" coll.Add "C:Documents and SettingsAdminРабочий столcalc.xls" coll.Add ThisWorkbook.FullName ' прикрепляем текущий файл Excel res = SendEmailUsingOutlook("name@domain.ru", "Текст письма 3", "Тема письма 3", coll) If res Then Debug.Print "Письмо 3 отправлено успешно" Else Debug.Print "Ошибка отправки" End Sub
Макрос использует функцию SendEmailUsingOutlook, которая:
- принимает в качестве параметров адрес получателя письма, тему и текст письма, список вложений
- запускает Outlook, формирует письмо, и отправляет его
- возвращает TRUE, если отправка прошла успешно, или FALSE, если с отправкой почты вызникли проблемы
Код функции SendEmailUsingOutlook:
Function SendEmailUsingOutlook(ByVal Email$, ByVal MailText$, Optional ByVal Subject$ = "", _ Optional ByVal AttachFilename As Variant) As Boolean ' функция производит отправку письма с заданной темой и текстом на адрес Email ' с почтового ящика, настроенного в Outlook для отправки писем "по-умолчанию" ' Если задан параметр AttachFilename, к отправляемому письму прикрепляется файл (файлы) On Error Resume Next: Err.Clear Dim OA As Object: Set OA = CreateObject("Outlook.Application") If OA Is Nothing Then MsgBox "Не удалось запустить OUTLOOK для отправки почты", vbCritical: Exit Function With OA.CreateItem(0) 'создаем новое сообщение .To = Email$: .Subject = Subject$: .Body = MailText$ If VarType(AttachFilename) = vbString Then .Attachments.Add AttachFilename If VarType(AttachFilename) = vbObject Then ' AttachFilename as Collection For Each file In AttachFilename: .Attachments.Add file: Next End If For i = 1 To 100000: DoEvents: Next ' без паузы не отправляются письма без вложений Err.Clear: .Send SendEmailUsingOutlook = Err = 0 End With Set OutApp = Nothing End Function
Пример макроса, с получением параметров письма из ячеек листа Excel:
Sub Отправить_Письмо_из_Outlook() ' адрес получателя - в ячейке A1, текст письма - в ячейке A2 res = SendEmailUsingOutlook(Cells(1, 1), Range("a2"), "Тема письма 1") If res Then Debug.Print "Письмо 1 отправлено успешно" Else Debug.Print "Ошибка отправки" End Sub
- 176469 просмотров
Не получается применить макрос? Не удаётся изменить код под свои нужды?
Оформите заказ у нас на сайте, не забыв прикрепить примеры файлов, и описать, что и как должно работать.
- Что делает макрос
- Код макроса
- Как работает макрос
- Как использовать
- Скачать файл
Ссылка на это место страницы:
#zadacha
Эту задачу можно выполнить с помощью автоматической отправки писем по электронной почте. В примере кода показано, как активная рабочая книга отправляется на адрес электронной почты в качестве вложения. С помощью команды Sendmail, вы можете отправлять простые сообщения электронной почты непосредственно из Excel. Тем не менее, команда SendMail не столь надежна, как автоматизация Outlook. SendMail не позволяет прикреплять файлы или использовать CC и BCC поля в электронной почте.
Поскольку этот код запускается из Excel, необходимо установить ссылку на библиотеку объектов Microsoft Outlook. Мы можем установить ссылку, открыв редактор Visual Basic в Excel и выбрав Tools➜References. Прокрутите вниз, пока не найдете запись Microsoft Outlook XX Object Library, где XX— это ваша версия Outlook. Установите флажок рядом с записью.
Ссылка на это место страницы:
#formula
Sub
OtpravilFailPoEmail()
Dim
OLApp
As
Outlook.Application
Dim
OLMail
As
Object
Set
OLApp =
New
Outlook.Application
Set
OLMail = OLApp.CreateItem(0)
OLApp.Session.Logon
With
OLMail
.
To
=
" info@akademia-excel.ru"
.CC =
""
.BCC =
""
.Subject =
"Тема письма"
.Body =
"Образец файла прилагается"
.Attachments.Add ActiveWorkbook.FullName
.Display
End
With
Set
OLMail =
Nothing
Set
OLApp =
Nothing
End
Sub
Ссылка на это место страницы:
#kak
1. Шаг 1 сначала объявляет две переменные. OLApp — это объектная переменная, которая предоставляет приложение Outlook. OLMail — это объектная переменная, которая содержит почтовый элемент.
2. Шаг 2 активирует Outlook и начинает новый сеанс. Обратите внимание, что мы используем OLApp.Session. Войдите в систему, чтобы войти в текущий сеанс MAPI (Messaging Programming Interface Application) с учетными данными по умолчанию. Он также создает почтовое сообщение. Это эквивалентно выбору кнопки «Новое сообщение» в Outlook.
3. Шаг 3 строит профиль нашего почтового отправления. Это включает в себя CC, BCC получателей, предмет, тему и вложение. Этот шаг отмечает, что получатели вводятся в кавычках, чтобы ввести несколько получателей, добавьте их через точку с запятой. Стандартным синтаксисом для вложения является Attachments.Add «Путь к файлу». В этом коде, мы указываем путь к файлу текущей рабочей книги с помощью синтаксиса ActiveWorkbook.Fullname. Это устанавливает текущую рабочую книгу как вложение для сообщения электронной почты. Когда сообщение было сформировано, мы используем метод .Display для просмотра электронной почты. Мы можем заменить .Display на .Send — это позволит автоматически отправлять письмо без просмотра.
4. Последним шагом мы очищаем память объектов, присвоенных нашим переменным. Это снижает вероятность каких-либо проблем, вызванных объектами, которые могут остаться открытыми в памяти.
Ссылка на это место страницы:
#touse
Для реализации этого макроса, вы можете скопировать и вставить его в стандартный модуль:
1. Активируйте редактор Visual Basic, нажав ALT + F11.
2. Щелкните правой кнопкой мыши имя проекта / рабочей книги в окне проекта.
3. Выберите Insert➜Module.
4. Введите или вставьте код во вновь созданном модуле.
Ссылка на это место страницы:
#file
Файлы статей доступны только зарегистрированным пользователям.
1. Введите свою почту
2. Нажмите Зарегистрироваться
3. Обновите страницу
Вместо этого блока появится ссылка для скачивания материалов.
Привет! Меня зовут Дмитрий. С 2014 года Microsoft Cretified Trainer. Вместе с командой управляем этим сайтом. Наша цель — помочь вам эффективнее работать в Excel.
Изучайте наши статьи с примерами формул, сводных таблиц, условного форматирования, диаграмм и макросов. Записывайтесь на наши курсы или заказывайте обучение в корпоративном формате.
Подписывайтесь на нас в соц.сетях: