Отправка файла excel макросом

Отправка книги или листа по электронной почте

Если вам часто приходится рассылать определенные книги или листы по электронной почте, то вы должны были заметить, что процедуру эту быстрой не назовешь. Если делать ее «классически», то надо:

  • открыть почтовую программу (например Outlook)
  • создать новое сообщение
  • вбить туда адрес, тему и текст
  • прикрепить к сообщению файл (не забыть!)
  • нажать кнопку Отправить

На самом деле почту можно легко отправлять прямо из Excel кучей разных способов. Поехали…

Способ 1. Встроенная отправка

Если у вас еще старый добрый Excel 2003, то все просто. Открываете нужную книгу/лист и выбираете в меню Файл — Отправить — Сообщение (File — Send To — Mail Recipient). Откроется окошко, в котором можно выбрать один из двух вариантов отправки:

sendmail1.gif

В первом случае текущая книга будет добавлена в сообщение как вложение, во втором — содержимое текущего листа попадет прямо в текст сообщения как текстовая таблица (без формул).

Кроме этого в меню Файл — Отправить (File — Send To) есть еще несколько более экзотических вариантов отправки:

 sendmail2.gif

  • Сообщение (для ознакомления) (Mail Recipient for Review) — отправляется вся книга целиком и при этом для нее включается отслеживание изменений, т.е. начинает явно фиксироваться — кто, когда и в каких ячейках какие изменения производил. Отобразить внесенные изменения потом можно в меню Сервис — Исправления — Выделить исправления (Tools — Track changes — Highlight changes) или на вкладке Рецензирование — Исправления (Reveiw — Track Changes) Выглядеть это будет примерно так:

    sendmail3.gif

    Цветные рамочки помечают изменения, внесенные в документ (для каждого пользователя — свой цвет). При наведении мыши всплывает похожее на примечание окошко с подробным описанием кто, что и когда изменил в этой ячейке. Весьма удобно для рецензирования документов, когда, например, вы правите отчет своих подчиненных или шеф правит ваш.

  • По маршруту (Routing Recipient) — сообщение, куда будет вложена ваша книга, отправится по цепочке получателей, каждый из которых автоматически будет пересылать его дальше, как эстафетную палочку. При желании можно задать, чтобы в конце цепочки сообщение вернулось к вам обратно. Можно включить режим отслеживания изменений, чтобы видеть правки, внесенный каждым человеком в цепочке.

В новых Excel 2007/2010 ситуация немного другая. В этих версиях для отправки книги по почте нужно выбрать кнопку Офис (Office Button) или вкладку Файл (File) и команду Отправить (Send). Далее, пользователю предлагается набор вариантов отправки:

sendmail5.gif

Обратите внимание на то, что в новых версиях исчезла возможность отправки отдельного листа книги, вставленного в тело письма — как это было в 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, что вызовет появление вот такого сообщения безопасности на экране:

sendmail4.gif

Дождитесь, пока кнопка Разрешить станет активной и нажмите ее, чтобы подтвердить свою отправку. После этого созданные автоматически сообщения будут помещены в папку Исходящие и отправятся получателям при первом запуске 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.

Community's user avatar

asked Dec 16, 2013 at 10:54

Dov Miller's user avatar

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 GP's user avatar

Punith GPPunith GP

6904 gold badges11 silver badges33 bronze badges

0

Skip to content

На чтение 3 мин. Просмотров 4.9k.

Что делает макрос: Самую основную задачу можно выполнить с помощью автоматической отправки по электронной почте. В примере кода показано, активная рабочая книга отправляется двум
получателям электронной почты в качестве вложения.
С помощью команды Sendmail, вы можете отправлять простые сообщения электронной почты непосредственно из Excel. Тем не менее, команда SendMail не столь надежна, как автоматизация Outlook. SendMail не позволяет прикреплять файлы или использовать CC и BCC поля в электронной почте.

Содержание

  1. Как макрос работает
  2. Код макроса
  3. Как этот код работает
  4. Как использовать

Как макрос работает

Так как этот код будет работать с 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. Шаг 1 сначала объявляет две переменные. OLApp — это объектная переменная, которая предоставляет Application 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. Высвобождение объектов, присвоенных нашим переменным, как правило, хорошая практика. Это снижает вероятность каких-либо проблем, вызванных объектами, которые могут остаться открытыми в памяти.

Как использовать

Для реализации этого макроса, вы можете скопировать и вставить его в стандартный модуль:

  1. Активируйте редактор Visual Basic, нажав ALT + F11.
  2. Щелкните правой кнопкой мыши имя проекта / рабочей книги в окне проекта.
  3. Выберите Insert➜Module.
  4. Введите или вставьте код.

  • Интернет
  • Рассылка почты

Пример макроса, отправляющего письма со вложениями из 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 просмотров

Не получается применить макрос? Не удаётся изменить код под свои нужды?

Оформите заказ у нас на сайте, не забыв прикрепить примеры файлов, и описать, что и как должно работать.

  1. Что делает макрос
  2. Код макроса
  3. Как работает макрос
  4. Как использовать
  5. Скачать файл

Ссылка на это место страницы:
#zadacha

Эту задачу можно выполнить с помощью автоматической отправки писем по электронной почте. В примере кода показано, как активная рабочая книга отправляется на адрес электронной почты в качестве вложения. С помощью команды Sendmail, вы можете отправлять простые сообщения электронной почты непосредственно из Excel. Тем не менее, команда SendMail не столь надежна, как автоматизация Outlook. SendMail не позволяет прикреплять файлы или использовать CC и BCC поля в электронной почте.

Поскольку этот код запускается из Excel, необходимо установить ссылку на библиотеку объектов Microsoft Outlook. Мы можем установить ссылку, открыв редактор Visual Basic в Excel и выбрав Tools➜References. Прокрутите вниз, пока не найдете запись Microsoft Outlook XX Object Library, где XX— это ваша версия Outlook. Установите флажок рядом с записью.

Ссылка на это место страницы:
#formula

  1. Sub OtpravilFailPoEmail()
  2. Dim OLApp As Outlook.Application
  3. Dim OLMail As Object  
  4. Set OLApp = New Outlook.Application
  5. Set OLMail = OLApp.CreateItem(0)
  6. OLApp.Session.Logon  
  7. With OLMail    
  8. .To = " info@akademia-excel.ru"    
  9. .CC = "" 
  10. .BCC = ""
  11. .Subject = "Тема письма"    
  12. .Body = "Образец файла прилагается"    
  13. .Attachments.Add ActiveWorkbook.FullName    
  14. .Display
  15. End With 
  16. Set OLMail = Nothing
  17. Set OLApp = Nothing
  18. 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. 

Изучайте наши статьи с примерами формул, сводных таблиц, условного форматирования, диаграмм и макросов. Записывайтесь на наши курсы или заказывайте обучение в корпоративном формате.

Подписывайтесь на нас в соц.сетях:

Понравилась статья? Поделить с друзьями:
  • Отправка заблокирована word как отключить
  • Отобразить строку по условию excel
  • Отправить файлы word через
  • Отобразить строки в excel по условию
  • Отправить свое резюме word