Письмо по программе excel

Хитрости »

1 Май 2011              386304 просмотров


Прежде чем начать читать статью прошу принять к сведению объявление: используйте СВОИ АДРЕСА ЭЛ.ПОЧТЫ при тестировании кодов. Не надо отсылать письма на указанные в статье e-mail адреса- это все приходит мне на почту. Помимо этого Вы сами не сможете понять работает или нет, т.к. письма придут мне, а не Вам.
Спасибо за понимание
P.S. А если написанное выше Вы все же проигнорировали и отправили письмо на мои адреса электронной почты — это означает, что Вы соглашаетесь с тем, что вся информация внутри письма, включая вложения, может быть использована мной без ограничений в личных целях.

  • Отправка через меню Excel
  • Простая отправка книги через VBA без Outlook
  • Отправка писем через VBA при помощи Outlook(с вложениями)
  • Отправить письма через Outlook с картинкой в теле письма
  • Массовая рассылка писем по адресам при помощи Outlook
  • Отправка сообщения без использования Outlook — используем CDO

Отправить письмо из Excel можно несколькими способами, в том числе и через написание кода в VBA.

Отправка через меню Excel
Отправку без кода осуществить достаточно просто:

  • Excel 2003: Файл(File)Отправить(Send To)Сообщение(Mail Recipient)
    и выбрать способ отправки:

    • Сообщение(Mail Recipient) — создается сообщение в программе по умолчанию для отправки электронных писем
    • Сообщение (для ознакомления) (Mail Recipient for Review) — вполне интересный вариант. Перед отправкой для книги включается отслеживание изменений(Сервис(Tools)Исправления(Track changes)). Можно воспользоваться этим методом, чтобы отправить получателю для внесения им изменений, а после отследить их(СервисИсправленияВыделить исправления(Highlight changes))
    • Сообщение (как вложение)(Mail Recipient as attachment) — создается сообщение в программе по умолчанию для отправки электронных писем, в которое вложением вкладывается активная книга целиком
    • По маршруту(Routing Recipient) — практически тоже самое, что и Сообщение (для ознакомления) (Mail Recipient for Review) с той разницей, что письмо с вложением пересылается как эстафета от одного получателя к другому. После этого так же можно отследить изменения, внесенные каждым пользователем
    • Папка Exchange(Exchange folder) — активная книга автоматически сохраняется в заданную папку общего сервера Microsoft Exchange. Доступ к этой книге будет открыт всем участникам рабочей группы
    • Факс пользователю службы факсов интернета(Fax) — отправляет содержимое книги по факсу указанным получателям. Для использования данной возможности должна быть установлена служба факсов
  • Excel 2007: Кнопка ОфисОтправить(Send)Сообщение(E-mail)
  • Excel 2010: Файл(File)Сохранить и отправить(Save & Send)Отправить(Send Using E-mail)
  • Далее выбирается способ отправки:

    • Как вложение(Send as attachment) — будет автоматически запущена почтовая программа по умолчанию и создано новое письмо, в которое уже будет вложен файл книги, из которой была вызвана команда
    • Как ссылку(Send link) — доступно, только если файл находится на сетевом ресурсе. После нажатия будет создано новое письмо в почтовой программе по умолчанию, в тело которого будет вставлена ссылка на книгу
    • Как PDF(Send as PDF) — файл будет автоматически сохранен в формате PDF, далее будет создано новое письмо в почтовой программе по умолчанию и файл PDF будет вставлен в письмо
    • Как XPS(Send as XPS) — файл будет автоматически сохранен в формате PDF, далее будет создано новое письмо в почтовой программе по умолчанию и файл PDF будет вставлен в письмо
    • Отправить как факс через интернет(Send as internet fax) — если у вас на ПК установлена служба работы с факсами и есть возможность отправлять и получать факсы на ПК — то данная команда отправит данные активного листа файла как факс

Простая отправка книги через VBA без Outlook

Описанные выше действия можно выполнить так же кодом(так же будет использоваться программа, установленная по умолчанию для отправки писем):

Sub SendMailStandart()
    ActiveWorkbook.SendMail "mail1@excel-vba.ru", "Тема письма"
End Sub

Также можно указать несколько получателей:

Sub SendMailStandart_MassRecipients()
    ActiveWorkbook.SendMail Array("mail1@excel-vba.ru", "mail2@excel-vba.ru"), "Тема письма"
End Sub

Внутри скобок Array можно в кавычках через запятую указать достаточное количество получателей.
Данный метод универсален, но работает только с активным файлом. Нельзя выбрать файл с диска и отправить как вложение. Кроме того, нельзя отправить более одного файла разом и указать текст письма.
Поэтому очень часто на форумах возникает вопрос как отправить письмо из Excel кодом с указанием темы, текста и вложения.
Есть несколько вариантов:


Отправить письмо через Outlook кодом VBA

Option Explicit
 
Sub Send_Mail()
    Dim objOutlookApp As Object, objMail As Object
    Dim sTo As String, sSubject As String, sBody As String, sAttachment As String
 
    Application.ScreenUpdating = False
    On Error Resume Next
    'пробуем подключиться к Outlook, если он уже открыт
    Set objOutlookApp = GetObject(, "Outlook.Application")
    Err.Clear 'Outlook закрыт, очищаем ошибку
    If objOutlookApp Is Nothing Then
        Set objOutlookApp = CreateObject("Outlook.Application")
    End If
    'раскомментировать строку, если в Outlook несколько учетных записей и нужно подключиться к конкретной(только если Outlook закрыть)
    '   [параметры]: Session.Logon "имя профиля","пароль",[показывать окно выбора профиля], [запускать в новой сессии]
    'objOutlookApp.Session.Logon "profile","1234",False, True
    Set objMail = objOutlookApp.CreateItem(0)   'создаем новое сообщение
    'если не получилось создать приложение или экземпляр сообщения - выходим
    If Err.Number <> 0 Then Set objOutlookApp = Nothing: Set objMail = Nothing: Exit Sub
 
    sTo = "AddressTo@mail.ru"    'Кому(можно заменить значением из ячейки - sTo = Range("A1").Value)
    sSubject = "Автоотправка"    'Тема письма(можно заменить значением из ячейки - sSubject = Range("A2").Value)
    sBody = "Привет от Excel-VBA"    'Текст письма(можно заменить значением из ячейки - sBody = Range("A3").Value)
    sAttachment = "C:TempКнига1.xls"    'Вложение(полный путь к файлу. Можно заменить значением из ячейки - sAttachment = Range("A4").Value)
 
    'создаем сообщение
    With objMail
        .To = sTo 'адрес получателя
        .CC = "" 'адрес для копии
        .BCC = "" 'адрес для скрытой копии
        .Subject = sSubject 'тема сообщения
        .Body = sBody 'текст сообщения
        '.HTMLBody = sBody 'если необходим форматированные текст сообщения(различные шрифты, цвет шрифта и т.п.)
        'добавляем вложение, если файл по указанному пути существует(dir проверяет это)
        If sAttachment <> "" Then
            If Dir(sAttachment, 16) <> "" Then
                .Attachments.Add sAttachment 'просто вложение
                'чтобы отправить активную книгу вместо sAttachment указать ActiveWorkbook.FullName
            End If
        End If
        .Send 'Display, если необходимо просмотреть сообщение, а не отправлять без просмотра
    End With
 
    Set objOutlookApp = Nothing: Set objMail = Nothing
    Application.ScreenUpdating = True
End Sub

Этот код отправляет одно письмо и одно вложение за раз. Но если несколько раз вызвать метод .Attachments.Add, то можно добавить еще файлы:

.Attachments.Add "C:TempКнига1.xlsx"
.Attachments.Add "C:TempКнига2.xlsx"
.Attachments.Add "C:DocumentsReport.rar"

Строка:

objOutlookApp.Session.Logon "user","1234",False, True

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

objOutlookApp.Session.Logon

Важно помнить: пути для файлов в качестве вложений должны содержать полный путь до файла, включая его имя и расширение: C:DocumentsReport.rar. При указании только имени Report.rar или пути без расширения (C:DocumentsReport) ошибки не будет, но вложения не будут помещены в сообщения и адресату отправится письмо без вложений.

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


 
Отправить письма через Outlook с картинкой в теле письма

Sub Send_Mail_With_Picture()
    Dim objOutlookApp As Object, objMail As Object
    Dim sTo As String, sSubject As String, sBody As String, sAttachment As String, sPicture As String
 
    Application.ScreenUpdating = False
    On Error Resume Next
    'пробуем подключиться к Outlook, если он уже открыт
    Set objOutlookApp = GetObject(, "Outlook.Application")
    Err.Clear 'Outlook закрыт, очищаем ошибку
    If objOutlookApp Is Nothing Then
        Set objOutlookApp = CreateObject("Outlook.Application")
    End If
    'objOutlookApp.Session.Logon "user","1234",False, True
    Set objMail = objOutlookApp.CreateItem(0)   'создаем новое сообщение
    'если не получилось создать приложение или экземпляр сообщения - выходим
    If Err.Number <> 0 Then Set objOutlookApp = Nothing: Set objMail = Nothing: Exit Sub
 
    sTo = "AddressTo@mail.ru"    'Кому(можно заменить значением из ячейки - sTo = Range("A1").Value)
    sSubject = "Автоотправка"    'Тема письма(можно заменить значением из ячейки - sSubject = Range("A2").Value)
    sBody = "Привет от Excel-VBA"    'Текст письма(можно заменить значением из ячейки - sBody = Range("A3").Value)
    sAttachment = "C:TempКнига1.xls"    'Вложение(полный путь к файлу. Можно заменить значением из ячейки - sAttachment = Range("A4").Value)
    sPicture = "C:ДокументыИзображенияExcel_vba_ru.png" 'если надо вставить в письмо картинку
    'создаем сообщение
    With objMail
        .To = sTo 'адрес получателя
        .CC = "" 'адрес для копии
        .BCC = "" 'адрес для скрытой копии
        .Subject = sSubject 'тема сообщения
'        .Body = sBody 'текст сообщения без форматирования
        .HTMLBody = sBody 'если необходим форматированные текст сообщения(различные шрифты, цвет шрифта и т.п.)
        'чтобы картинка была видна внутри сообщения - надо её сначала добавить как вложение
        'если картинка по указанному пути существует(dir проверяет это)
        If Dir(sPicture, 16) <> "" Then
            If Dir(sPicture, 16) <> "" Then
                .Attachments.Add sPicture
                'теперь вставляем код картинки
                .HTMLBody = .HTMLBody & "<p>Картинка в письме</p>" & "<img src=cid:" & Replace(Dir(sPicture, 16), " ", "%20") & ">" ' & " height=240 width=180>"
            '" height=240 width=180>" - если нужны размеры картинки
            End If
        End If
        'добавляем вложение, если файл по указанному пути существует(dir проверяет это)
        If sAttachment <> "" Then        
            If Dir(sAttachment, 16) <> "" Then
                .Attachments.Add sAttachment 'просто вложение
            End If
        End If
        .Send 'Display, если необходимо просмотреть сообщение, а не отправлять без просмотра
    End With
 
    Set objOutlookApp = Nothing: Set objMail = Nothing
    Application.ScreenUpdating = True
End Sub

Этот код отправляет одно письмо и вставляет одну картинку. За это отвечает строка

"<img src=cid:" & Replace(Dir(sPicture, 16), " ", "%20") & ">"

Если картинку надо вложить с заранее указанными размерами, то строка будет выглядеть так:

"<img src=cid:" & Replace(Dir(sPicture, 16), " ", "%20") & " height=240 width=180>"
'height - высота
'width  - ширина

Если надо добавить несколько картинок, то метод .Attachments.Add sPicture надо будет вызвать столько раз, сколько картинок(для каждого свой путь к картинке).

Важно помнить: пути для картинок должны содержать полный путь до файла, включая его имя и расширение: C:ДокументыИзображенияExcel_vba_ru.png. При указании только имени Excel_vba_ru.png или пути без расширения (C:ДокументыИзображенияExcel_vba_ru) ошибки не будет, но картинка не будет вставлена, а вместо неё скорее всего будет текст «Ошибка загрузки картинки!» или пустой квадрат вместо реальной картинки.


 
Массовая рассылка писем по адресам

Так же можно сделать нечто вроде рассылки, организовав цикл по ячейкам. Предположим, что в столбце А записаны адреса, в столбце В тема, в столбце С текст сообщения, в столбце D путь к вложениям:
Таблица адресов
Тогда можно применить следующий код:

Sub Send_Mail_Mass()
    Dim objOutlookApp As Object, objMail As Object
    Dim sTo As String, sSubject As String, sBody As String, sAttachment As String
    Dim lr As Long, lLastR As Long
 
    Application.ScreenUpdating = False
    On Error Resume Next
    'пробуем подключиться к Outlook, если он уже открыт
    Set objOutlookApp = GetObject(, "Outlook.Application")
    Err.Clear 'Outlook закрыт, очищаем ошибку
    If objOutlookApp Is Nothing Then
        Set objOutlookApp = CreateObject("Outlook.Application")
    End If
    'произошла ошибка создания объекта - выход
    If Err.Number <> 0 Then Set objOutlookApp = Nothing: Set objMail = Nothing: Exit Sub
    'objOutlookApp.Session.Logon "user","1234",False, True
 
    lLastR = Cells(Rows.Count, 1).End(xlUp).Row
    'цикл от второй строки(начало данных с адресами) до последней ячейки таблицы
    For lr = 2 To lLastR
        Set objMail = objOutlookApp.CreateItem(0)   'создаем новое сообщение
        'создаем сообщение
        With objMail
            .to = Cells(lr, 1).Value 'адрес получателя
            .Subject = Cells(lr, 2).Value 'тема сообщения
            .Body = Cells(lr, 3).Value 'текст сообщения
            'вложение(если ячейка не пустая и путь к файлу указан правильно)
            If Cells(lr, 4).Value <> "" Then   
                If Dir(Cells(lr, 4).Value, 16) <> "" Then
                    .Attachments.Add Cells(lr, 4).Value
                End If
            End If
            .Send 'Display, если необходимо просмотреть сообщение, а не отправлять без просмотра
        End With
    Next lr
 
    Set objOutlookApp = Nothing: Set objMail = Nothing
    Application.ScreenUpdating = True
End Sub

Скачать пример массовой рассылки:

  Массовая рассылка писем через Outlook.xls (60,0 KiB, 6 986 скачиваний)

При использовании этих кодов есть один недостаток: очень часто при программной отправке писем Outlook выдает окно с запросом подтверждения отправки. Сообщение может быть трех видов:

  • Программа пытается получить доступ к адресам электронной почты, хранящимся в Outlook. Если вы этого не ожидаете, нажмите кнопку «Запретить» и проверьте наличие последних обновлений для антивирусной программы.
  • Программа пытается отправить сообщение от вашего имени. Если вы этого не ожидаете, нажмите кнопку «Запретить» и проверьте наличие последних обновлений для антивирусной программы.
  • Программа пытается выполнить действие, которое может привести к отправке сообщения от вашего имени. Если вы этого не ожидаете, нажмите кнопку «Запретить» и проверьте наличие последних обновлений для антивирусной программы

Чтобы при программной отправке данных сообщений не появлялось, в версиях Outlook, начиная с 2007 можно отключить его настройками безопасности:

  • Outlook 2007: МенюПараметрыЦентр управления безопасностьюПрограммный доступ-установить Никогда не предупреждать о подозрительной активности (не рекомендуется)
  • Outlook 2010 и выше: ФайлПараметрыЦентр управления безопасностьюПрограммный доступ-установить Никогда не предупреждать о подозрительной активности (не рекомендуется)

ВАЖНО: Если компьютер управляется администратором Microsoft Exchange или Microsoft Windows Active Directory Domain Services и администратором в качестве параметров по умолчанию установлен запрет на внесение изменений в параметры безопасности пользователями, возможность изменения данных настроек безопасности программного доступа будет недоступна.

Важно: сам код рассылки не имеет никаких ограничений по числу отправляемых сообщений. Но различные почтовые серверы могут устанавливать свои лимиты. Например, Gmail и Yandex могут заблокировать email, с которого ведется рассылка, если общее количество отправленных сообщений превышает 100 штук в день. Поэтому производить важные массовые рассылки рекомендуется с собственного SMTP-сервера.


 

Но так же при отправке файлов и писем часто необходимо не привязываться к конкретной почтовой программе. Ведь далеко не все ставят Outlook. Многие используют иные почтовые программы, например TheBat.

Отправка сообщения без использования Outlook — используем CDO

Option Explicit
 
Sub Send_Mail()
    Const CDO_Cnf = "http://schemas.microsoft.com/cdo/configuration/"
    Dim oCDOCnf As Object, oCDOMsg As Object
    Dim SMTPserver As String, sUsername As String, sPass As String, sMsg As String
    Dim sTo As String, sFrom As String, sSubject As String, sBody As String, sAttachment As String
    On Error Resume Next
    'sFrom – как правило совпадает с sUsername
    SMTPserver = "smtp.yandex.ru"    ' SMTPServer: для Mail.ru "smtp.mail.ru"; для Яндекса "smtp.yandex.ru"; для Рамблера "mail.rambler.ru"
    sUsername = "YourMail@mail.ru"    ' Учетная запись на сервере
    sPass = "1234"    ' Пароль к почтовому аккаунту
 
    If Len(SMTPserver) = 0 Then MsgBox "Не указан SMTP сервер", vbInformation, "www.Excel-VBA.ru": Exit Sub
    If Len(sUsername) = 0 Then MsgBox "Не указана учетная запись", vbInformation, "www.Excel-VBA.ru": Exit Sub
    If Len(sPass) = 0 Then MsgBox "Не указан пароль", vbInformation, "www.Excel-VBA.ru": Exit Sub
 
    sTo = "AddressTo@mail.ru"    'Кому
    sFrom = "YourMail@yandex.ru"    'От кого
    sSubject = "Автоотправка"    'Тема письма
    sBody = "Привет от Excel-VBA"    'Текст письма
    sAttachment = "C:/Temp/Книга1.xls"    'Вложение(полный путь к файлу)
 
    'Назначаем конфигурацию CDO
    Set oCDOCnf = CreateObject("CDO.Configuration")
    With oCDOCnf.Fields
        .Item(CDO_Cnf & "sendusing") = 2
        .Item(CDO_Cnf & "smtpauthenticate") = 1
        .Item(CDO_Cnf & "smtpserver") = SMTPserver
        'если необходимо указать SSL
        '.Item(CDO_Cnf & "smtpserverport") = 465 'для Яндекса и Gmail 465
        '.Item(CDO_Cnf & "smtpusessl") = True
        '=====================================
        .Item(CDO_Cnf & "sendusername") = sUsername
        .Item(CDO_Cnf & "sendpassword") = sPass
        .Update
    End With
    'Создаем сообщение
    Set oCDOMsg = CreateObject("CDO.Message")
    With oCDOMsg
        Set .Configuration = oCDOCnf
        .BodyPart.Charset = "koi8-r"
        .From = sFrom
        .To = sTo
        .Subject = sSubject
        .TextBody = sBody
        'Проверка наличия файла по указанному пути
        If Len(sAttachment) > 0 Then
            If Dir(sAttachment, 16) <> "" Then
                .AddAttachment sAttachment
            End If
        End If
        .Send
    End With
 
    Select Case Err.Number
    Case -2147220973: sMsg = "Нет доступа к Интернет"
    Case -2147220975: sMsg = "Отказ сервера SMTP"
    Case 0: sMsg = "Письмо отправлено"
    Case Else: sMsg = "Ошибка номер: " & Err.Number & vbNewline & "Описание ошибки: " & Err.Description
    End Select
    MsgBox sMsg, vbInformation, "www.Excel-VBA.ru"
    Set oCDOMsg = Nothing: Set oCDOCnf = Nothing
End Sub

Данный код отправляет письмо, используя объект CDO(Collaboration Data Objects — присутствует во всех версиях Windows) и от имени Вашей учетной записи(либо Яндекс, либо Мэйл, либо Рамблер либо др.).

  • SMTPserver — Каждый из приведенных выше сервисов имеет свой сервер для отправки сообщений(его можно посмотреть на сайте сервиса). В комментариях к коду я написал три самых распространенных, но если Вы используете какой-то другой, то просто посмотрите на его сайте настройки для Outlook и отыщите тот параметр, который отвечает за SMTPserver.
  • sUsername — это Ваш логин для входа в почтовый сервис. Думаю тут все понятно. Единственный момент — обязательно указывать e-mail именно в полном виде — YourMail@mail.ru, даже если для входа на сервис через браузер Вы используете только первую часть записи(YourMail). Если необходимо подставить в качестве отправителя псевдоним(чтобы получатель видел не просто адрес, а ассоциированное имя учетной записи), то указывать надо именно в формате псевдонима:
    sFrom = "Excel-vba <YourMail@yandex.ru>"

    Excel-vba — и есть псевдоним. А сам адрес должен указываться между знаками <>

  • sPass — пароль доступа к Вашей учетной записи, который Вы используете для входа в почту.

Это основные моменты. Поля Кому(sTo), От кого(sFrom),Тема письма(sSubject), Текст письма(sBody) и Вложение(sAttachment) думаю не нуждаются в расшифровке.
Так же стоит учесть пару важных моментов: если на почтовом сервере используется шифрование, то необходимо раскомментировать(убрать знак апострофа) эти строки:

.Item(CDO_Cnf & "smtpserverport") = 465
.Item(CDO_Cnf & "smtpusessl")

Иначе вместо отправки письма получим ошибку «Отказ сервера SMTP». Серверы Яндекс и Gmail требуют шифрования, а значит для них указанные выше строки должны быть активированы(т.е. раскомментированы). Номер порта указывается в описании настроек сервера и для каждого сервера может быть своим, поэтому если с указанием приведенного в коде порта(«smtpserverport») письмо не отправляется — необходимо зайти в настройки почтового сервера и убедиться в правильности указания номера порта.

Чтобы использовать данный код вы можете либо просто скопировать его прямо со страницы, либо скачать файл. В файле программа немного упрощена к использованию — в ячейки листа вам необходимо будет внести поля: Кому(sTo), От кого(sFrom),Тема письма(sSubject), Текст письма(sBody) и Вложение(sAttachment) и выбрать SMTPserver. SMTPserver выбирается из выпадающего списка. Сам список является динамическим и расположен на листе «Settinngs«. Там же расположены поля Учетной записи и Пароль, которые автоматически подставляются в необходимые поля на листе «Отправка«. Т.к. список динамический Вы можете просто добавлять к уже имеющимся новые сервисы и потом просто выбирать их из списка. Так же в файле есть еще одна возможность — выбрать файл. Для этого надо просто нажать на кнопку и выбрать файл.

Скачать пример:

  Массовая рассылка писем через CDO — без Outlook.xls (64,0 KiB, 7 545 скачиваний)


Ввиду все более участившихся вопросов о том, как добавить к тексту письма картинку именно через CDO — описываю как это можно сделать. Я приведу лишь самый главный кусок кода — создание непосредственно сообщения. Весь остальной код остается таким же, как приведен выше.

With oCDOMsg
    Set .Configuration = oCDOCnf
    .From = sFrom
    .BodyPart.Charset = "windows-1251"
    .To = sTo
    .Subject = sSubject
    Set objbp = oCDOMsg.AddRelatedBodyPart("C:ДокументыИзображения11.jpg", "11.jpg", 1)
    objbp.Fields.Item("urn:schemas:mailheader:Content-ID") = "<11.jpg>"
    objbp.Fields.Update
    If Len(sAttachment) > 0 Then
        If Dir(sAttachment, 16) <> "" Then
            .AddAttachment sAttachment
        End If
    End If
    'для вложения картинки письмо лучше формировать в формате HTML
    .HTMLBody = "<img src=""11.jpg""><br />" & sBody
    .Send
End With

Самый главный момент:
AddRelatedBodyPart

    C:ДокументыИзображения11.jpg — указывается полный путь к файлу картинки на компьютере, включая расширение файла.
    11.jpg — указывается имя картинки с расширением. Это имя будет использовано внутри письма и именно его необходимо будет указать дальше в «urn:schemas:mailheader:Content-ID». И указывать обязательно в треугольных скобках: «<11.jpg>»
    внутри же самого письма в том месте, где должна отображаться картинки надо записать:

    в приведенном выше коде картинка вставляется в самом начале письма и после неё так же добавляется перенос на новую строку при помощи тэга

Также см.:
Отправка листа/книги по почте
Вставить в письмо подпись из Outlook через VBA
Вставить в письмо Outlook таблицу Excel с форматированием
Сохранить вложения из Outlook в указанную папку
Как отправить письмо от другой учетной записи Outlook


Статья помогла? Поделись ссылкой с друзьями!

  Плейлист   Видеоуроки


Поиск по меткам



Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика

Обычно мы используем почтовые клиенты, такие как Outlook, Gmail и т. д., для отправки электронных писем. Но многие люди хранят данные в книгах Excel, и им необходимо отправлять некоторые данные другим, пока они работают с ними. Поэтому им необходимо отправлять электронные письма прямо из книги Excel, что экономит время на работу с почтовым клиентом. Это пошаговое руководство покажет вам, как отправлять электронные письма из Excel в различных условиях.

Внимание: Прежде чем применять следующие методы, вам необходимо настроить почтовый клиент Outlook на своем компьютере и установить его в качестве почтового клиента по умолчанию.

Содержание: [ Скрывать ]

(Щелкните любой заголовок в оглавлении ниже или справа, чтобы перейти к соответствующей главе.)


1. Основы отправки писем из Excel

В этом разделе представлены основы отправки электронных писем из Excel.

1.1 Отправка электронных писем из Excel с помощью встроенных функций Excel

Если вы хотите отправлять только простые электронные письма из Excel, включая только поля «Кому», «Тема», «Копия» и «Тело». В этом могут помочь встроенные функции Excel.


1.1.1 Отправка электронной почты из Excel с помощью формулы

Как показано в таблице ниже, для отправки разных электронных писем из Excel на основе заданных полей вы можете использовать ссылки на ячейки заданных полей для создания различных формул гиперссылок, чтобы это сделать. После создания гиперссылок электронной почты вы можете щелкнуть гиперссылку, необходимую для автоматической отправки электронного письма.

Примечание: Если в полях «Кому» или «Копия» указано несколько получателей, разделите их точкой с запятой.

Этот раздел разделен на четыре части, чтобы показать вам шаги по добавлению адреса электронной почты, получателей копий, строки темы и основного текста отдельно в формулу гиперссылки. Пожалуйста, сделайте следующее.

Синтаксис и аргументы HYPERLINK функции следующие.

Синтаксис

HYPERLINK(link_location, [friendly_name])

аргументы

Link_location (обязательно): Путь и имя файла открываемого документа;

Советы. В этом руководстве все поля, которые нам нужны для электронного письма, такие как адрес электронной почты получателя, получатели копий, строка темы и основной текст, должны быть помещены в первый аргумент «link_location».

Дружественное имя (необязательно): значение перехода, отображаемое в ячейке.


1.1.1.1 Добавить адрес электронной почты в формулу гиперссылки

Здесь мы используем «почта:» как часть формулы для добавления получателя электронной почты. В этом примере адрес электронной почты первого получателя находится в ячейке B2, поэтому нам нужно добавить «mailto:» и сослаться на ячейку B2.

«почта:»&B2

1. Выберите ячейку для отображения гиперссылки. В этом случае я выбираю ячейку F2.

2. Затем введите в него следующую формулу.

=HYPERLINK(«mailto:»&B2)

Внимание: Если вы нажмете кнопку Enter ключ, будет создана гиперссылка, как показано на снимке экрана ниже. Когда вы нажмете на ссылку, будет создано электронное письмо Outlook, и адрес электронной почты получателя будет автоматически заполнен в поле «Кому».

Адрес электронной почты получателя теперь добавляется в формулу гиперссылки. Выполните следующие шаги, чтобы добавить строку темы, получателей копий и основной текст по мере необходимости.


1.1.1.2 Добавить получателей копии в формулу гиперссылки

Чтобы добавить получателей копий к функции гиперссылки, добавьте «?cc=» как часть формулы следующим образом.

«?cc=» & C2

где C2 содержит адрес электронной почты получателя копии.

Формула в ячейке F2 должна быть следующей:

=HYPERLINK(«mailto:» & B2 & «?cc=» & C2)


1.1.1.3 Добавить строку темы в формулу гиперссылки

Чтобы добавить строку темы к функции гиперссылки, добавьте «&тема=» как часть формулы следующим образом.

«&тема=»& D2

где C2 содержит тему электронной почты.

Формула в ячейке F2 теперь должна выглядеть следующим образом:

=HYPERLINK(«mailto:» & B2 & «?cc=» & C2 & «&subject=»& D2)


1.1.1.4 Добавление основного текста с разрывами строк в формулу гиперссылки

Последний шаг — добавить основной текст в формулу гиперссылки. Как вы можете видеть в примере, две строки текста в E2 разделены разрывом строки, и вы хотите сохранить разрыв строки в теле письма. Распознает ли Outlook разрыв строки в этом случае? Давайте проверим это.

Чтобы добавить основной текст в формулу гиперссылки, вам нужно добавить «&тело=» как часть формулы следующим образом.

«&тело=»& E2

где E2 содержит основной текст сообщения электронной почты.

Формула в ячейке F2 теперь отображается следующим образом:

=HYPERLINK(«mailto:» & B2 & «?cc=» & C2 & «&subject=»& D2 & «&body=»& E2)

Примечание: Если вы нажмете Enter ключ и нажмите на ссылку. Вы можете видеть в новом электронном письме, что содержимое в теле письма отображается в той же строке.

Чтобы отобразить тело электронной почты в отдельных строках, вам необходимо изменить содержимое ячейки, добавив код символа возврата каретки. % 0A к тексту, где нужно вставить разрыв строки. Смотрите скриншот:


1.1.1.5 Укажите текст для отображения гиперссылки

На предыдущих шагах мы завершили аргумент Link_location с полями электронной почты. Здесь, в этом разделе, мы собираемся закончить следующий аргумент [friendly_name].

В этом случае я хочу, чтобы ячейка гиперссылки отображала текст как «Электронная почта для хх”, где xx — имя получателя в формате A2. Таким образом, формулу в F2 следует изменить на:

=HYPERLINK(«mailto:» & B2 & «?cc=» & C2 & «&subject=»& D2 & «&body=»& E2, «Email to «&A2)

Нажмите Enter ключ для получения результата.

Выберите эту ячейку формулы и перетащите ее Ручка автозаполнения вниз, чтобы создать другие гиперссылки электронной почты. Смотрите скриншот:


1.1.2 Отправка электронной почты из Excel с помощью функции гиперссылки

За исключением использования приведенной выше формулы гиперссылки, вы можете вручную создать гиперссылку электронной почты с Вставить Гиперссылка функция в Экселе. Этот раздел покажет вам шаги.

1. Щелкните правой кнопкой мыши письмо, в которое вы хотите вставить гиперссылку, выберите Ссылка из контекстного меню.

2. Во всплывающем Вставить гиперссылку диалоговое окно необходимо настроить следующим образом.

2.1) Выбрать лектронная почта в левой панели.

2.2). Текст для отображения текстовое поле, введите текст, который вы хотите отобразить в ячейке;

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

2.3). Адрес электронной почты текстовое поле, вам нужно ввести следующие адреса электронной почты.

mailto: адрес электронной почты

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

2.4). Тема текстовое поле, вы можете указать тему и тело письма прямо здесь. Пожалуйста, настройте следующим образом:

Email subject&body=Тело письма

В этом случае я набираю Ежемесячная продажа&body=Привет,%0AEписьмо получено.

> где предметом Ежемесячная распродажа;

и

> тело письма:

Здравствуйте,

Электронная почта получена. (% 0A это код символа возврата каретки, который может быть распознан Outlook)

2.5) Нажмите OK кнопку для сохранения гиперссылки. Смотрите скриншот:

При нажатии на гиперссылку будет создано электронное письмо Outlook с указанными полями «Кому», «Тема» и «Тело», как показано на снимке экрана ниже.

Заметки:

1) С помощью этого метода вам приходилось создавать каждую гиперссылку электронной почты вручную.

2) Вы не можете добавить поле «Копия» в электронные письма с помощью этого метода. Итак, если вам нужно поле «Копия», добавьте его из нового открывающегося окна электронной почты.


1.2 Отправка электронной почты нескольким получателям в ячейках с помощью сценария VBA

В приведенном выше примере вы можете видеть, что в ячейке отображается несколько адресов электронной почты, разделенных точкой с запятой. Если у вас есть список адресов электронной почты, как показано на снимке экрана ниже, и вы хотите отправить электронное письмо или независимое электронное письмо всем им, следующий код VBA может оказать вам услугу.


1.2.1 Отправить электронное письмо нескольким получателям в ячейках с помощью сценария VBA

1. На листе, который содержит все адреса электронной почты, на которые вы хотите отправить электронное письмо. нажмите другой + F11 , чтобы открыть Microsoft Visual Basic для приложений окно.

2. в Microsoft Visual Basic для приложений окна, нажмите Вставить > Модуль, а затем вставьте следующий код в Модуль (код) окно.

Код VBA: отправить электронное письмо на список адресов электронной почты

Sub sendmultiple()
'updateby Extendoffice 20220802
    Dim xOTApp As Object
    Dim xMItem As Object
    Dim xCell As Range
    Dim xRg As Range
    Dim xEmailAddr As String
    Dim xTxt As String
    On Error Resume Next
    xTxt = ActiveWindow.RangeSelection.Address
    Set xRg = Application.InputBox("Please select the addresses list:", "Kutools for Excel", xTxt, , , , , 8)
    If xRg Is Nothing Then Exit Sub
    Set xOTApp = CreateObject("Outlook.Application")
    For Each xCell In xRg
        If xCell.Value Like "*@*" Then
            If xEmailAddr = "" Then
                xEmailAddr = xCell.Value
            Else
                xEmailAddr = xEmailAddr & ";" & xCell.Value
            End If
        End If
    Next
    Set xMItem = xOTApp.CreateItem(0)
    With xMItem
        .To = xEmailAddr
        .Subject = "Test"
        .Body = "Dear " _
                & vbNewLine & vbNewLine & _
                "This is a test email " & _
                "sending in Excel"
        .Display
    End With
End Sub

3. нажмите F5 ключ для запуска кода и Kutools for Excel всплывает диалоговое окно. Выберите список адресов электронной почты и нажмите OK.

Ноты:

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

Установите xRg = Application.InputBox(«Пожалуйста, выберите список адресов:», «Kutools for Excel», xTxt, , , , , 8)

с

Установить xRg = диапазон («A2: A7»)

2) Вы можете указать свою тему и тело письма в следующих строках:

.Тема = «Тест»

.Body = "Dear " _
        & vbNewLine & vbNewLine & _
        "This is a test email " & _
        "sending in Excel"

3) Чтобы напрямую отправить электронное письмо, не открывая следующее окно нового сообщения, вам необходимо заменить эту строку:

.Отображать

с

.Послать

После запуска кода все адреса электронной почты в выбранном диапазоне отображаются в поле «Кому» окна сообщения. Смотрите скриншот:


1.2.2 Отдельно отправлять электронные письма каждому получателю, указанному в ячейках, с помощью сценария VBA

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

1. На листе, который содержит все адреса электронной почты, на которые вы хотите отправлять электронные письма. нажмите другой + F11 ключи к откройте окно Microsoft Visual Basic для приложений.

2. в Microsoft Visual Basic для приложений окна, нажмите Вставить > Модули, а затем вставьте следующий код в окно модуля (код).

Код VBA: отправлять электронные письма на каждый адрес электронной почты, указанный в ячейках отдельно

Sub SendEmailToAddressInCells()
'Updated by Extendoffice 20220802
    Dim xRg As Range
    Dim xRgEach As Range
    Dim xRgVal As String
    Dim xAddress As String
    Dim xOutApp As Outlook.Application
    Dim xMailOut As Outlook.MailItem
    On Error Resume Next
    xAddress = ActiveWindow.RangeSelection.Address
    Set xRg = Application.InputBox("Please select the addresses list", "KuTools For Excel", xAddress, , , , , 8)
    If xRg Is Nothing Then Exit Sub
    Application.ScreenUpdating = False
    Set xOutApp = CreateObject("Outlook.Application")
    Set xRg = xRg.SpecialCells(xlCellTypeConstants, xlTextValues)
    For Each xRgEach In xRg
        xRgVal = xRgEach.Value
        If xRgVal Like "?*@?*.?*" Then
            Set xMailOut = xOutApp.CreateItem(olMailItem)
            With xMailOut
                .To = xRgVal
                .Subject = "Test"
                .Body = "Dear " _
                      & vbNewLine & vbNewLine & _
                        "This is a test email " & _
                        "sending in Excel"
                .Display
                '.Send
            End With
        End If
    Next
    Set xMailOut = Nothing
    Set xOutApp = Nothing
    Application.ScreenUpdating = True
End Sub

3. Затем нажмите Tools
> Рекомендации. В разделе Ссылки — VBAProject диалоговое окно, найдите и отметьте Библиотека объектов Microsoft Outlook 16.0 и нажмите OK чтобы сохранить изменения.

4. нажмите F5 ключ для запуска кода и Kutools for Excel всплывает диалоговое окно. Выберите список адресов электронной почты и нажмите ОК.

Ноты:

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

Установите xRg = Application.InputBox(«Пожалуйста, выберите список адресов:», «Kutools for Excel», xTxt, , , , , 8)

с

Установить xRg = диапазон («A2: A7»)

2) Вы можете указать свою тему и тело письма в следующих строках:

.Subject = "Test"
.Body = "Dear " _
        & vbNewLine & vbNewLine & _
        "This is a test email " & _
        "sending in Excel"

3) Чтобы напрямую отправить электронное письмо, не открывая следующие окна сообщений, вам необходимо заменить эту строку:

.Отображать

с

.Послать

В этом примере в выбранном диапазоне шесть адресов электронной почты, поэтому автоматически будет создано шесть окон сообщений Outlook с отдельным адресом электронной почты, указанным в поле «Кому», как показано на снимке экрана ниже.

5. Наконец, нажмите Отправить кнопку, чтобы отправить письмо по одному.


2. Вставьте вложения или подпись Outlook в электронные письма, отправленные из Excel (с помощью сценариев VBA).

В этом разделе показано, как вставлять вложения или подпись Outlook по умолчанию в электронные письма, отправляемые из Excel.

2.1 Вставляйте вложения в электронные письма, отправленные из Excel

Здесь мы описываем различные случаи вставки вложений, и вы можете выбрать метод в соответствии с вашими потребностями. В этом разделе вы можете научиться (щелкните любую из следующих ссылок, чтобы перейти к соответствующему методу):


2.1.1 Отправить по электронной почте определенный файл в качестве вложения

Вы можете применить следующий код VBA для отправки по электронной почте одного или нескольких файлов в папке в виде вложений из Excel.

1. нажмите другой + F11 ключи.

2. В дебюте Microsoft Visual Basic для приложений окна, нажмите Вставить > Модули. Затем вставьте следующий код VBA в окно модуля (код).

Код VBA: файлы электронной почты в папке в виде вложений из Excel

Sub EmailWithAttachments()
'Updated by Extendoffice 20220802
    Dim xStrFile As String
    Dim xFilePath As String
    Dim xFileDlg As FileDialog
    Dim xFileDlgItem As Variant
    Dim xOutApp As Outlook.Application
    Dim xMailOut As Outlook.MailItem
    Application.ScreenUpdating = False
    Set xOutApp = CreateObject("Outlook.Application")
    Set xMailOut = xOutApp.CreateItem(olMailItem)
    Set xFileDlg = Application.FileDialog(msoFileDialogFilePicker)
    If xFileDlg.Show = -1 Then
        With xMailOut
            .BodyFormat = olFormatRichText
            .To = "xxx@aaa.com"
            .Subject = "test"
            .HTMLBody = "test"
            For Each xFileDlgItem In xFileDlg.SelectedItems
                .Attachments.Add xFileDlgItem
            Next xFileDlgItem
            .Display
        End With
    End If
    Set xMailOut = Nothing
    Set xOutApp = Nothing
    Application.ScreenUpdating = True
End Sub

Заметки:

1) В строке .To = xxx@aaa.com, пожалуйста, замените xxx@aaa.com с адресом электронной почты вашего собственного получателя;

2) Изменить тему письма и тело письма отдельно в строке .Subject = «тест» и .HTMLBody = «тест»;

3) Вы можете добавить получателей копии и скрытой копии по мере необходимости. Просто добавьте следующие две строки ниже строки .Кому = xxx@aaa.com.

.CC = «адрес электронной почты»

.BCC = «адрес электронной почты»

3. Затем нажмите Tools
> Рекомендации. В разделе Ссылки — VBAProject диалоговое окно, найдите и отметьте Библиотека объектов Microsoft Outlook 16.0 и нажмите OK чтобы сохранить изменения.

4. нажмите F5 ключ для запуска кода, затем Приложения появится всплывающее окно, выберите файлы, которые необходимо прикрепить к электронному письму, а затем нажмите OK.

Затем всплывает окно сообщения. Вы можете видеть, что выбранные файлы отображаются в виде вложений в поле «Прикрепленные».


2.1.2 Отправьте текущий рабочий лист по электронной почте в виде вложения

Если вы хотите отправить текущий рабочий лист по электронной почте в виде вложения из Excel, вы можете применить сценарий VBA в этом разделе.

1. нажмите другой + F11 ключи.

2. В дебюте Microsoft Visual Basic для приложений окна, нажмите вставить > Модули. Затем вставьте следующий код VBA в Модуль (код) окно.

Код VBA: отправьте текущий рабочий лист по электронной почте в виде вложения

Sub SendWorkSheet()
'Update by Extendoffice 20220802
Dim xFile As String
Dim xFormat As Long
Dim Wb As Workbook
Dim Wb2 As Workbook
Dim FilePath As String
Dim FileName As String
Dim OutlookApp As Object
Dim OutlookMail As Object
On Error Resume Next
Application.ScreenUpdating = False
Set Wb = Application.ActiveWorkbook
ActiveSheet.Copy
Set Wb2 = Application.ActiveWorkbook
Select Case Wb.FileFormat
Case xlOpenXMLWorkbook:
    xFile = ".xlsx"
    xFormat = xlOpenXMLWorkbook
Case xlOpenXMLWorkbookMacroEnabled:
    If Wb2.HasVBProject Then
        xFile = ".xlsm"
        xFormat = xlOpenXMLWorkbookMacroEnabled
    Else
        xFile = ".xlsx"
        xFormat = xlOpenXMLWorkbook
    End If
Case Excel8:
    xFile = ".xls"
    xFormat = Excel8
Case xlExcel12:
    xFile = ".xlsb"
    xFormat = xlExcel12
End Select
FilePath = Environ$("temp") & ""
FileName = Wb.Name & Format(Now, "dd-mmm-yy h-mm-ss")
Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookMail = OutlookApp.CreateItem(0)
Wb2.SaveAs FilePath & FileName & xFile, FileFormat:=xFormat
With OutlookMail
    .To = "xxx@aaa.com"
    .CC = "Email Address"
    .BCC = "Email Address"
    .Subject = "kte features"
    .Body = "Please check and read this document."
    .Attachments.Add Wb2.FullName
    .Display
    '.Send
End With
Wb2.Close
Kill FilePath & FileName & xFile
Set OutlookMail = Nothing
Set OutlookApp = Nothing
Application.ScreenUpdating = True
End Sub

Ноты:

1) В линейке.Кому = xxx@aaa.com, пожалуйста, замените xxx@aaa.com с реальным адресом электронной почты получателя. Если вам нужно несколько адресов электронной почты, разделите их точкой с запятой.

2) Изменить тему письма и тело письма отдельно в строке .Subject = «особенности kte» и .Body = «Пожалуйста, проверьте и прочитайте этот документ.»;

3) В следующих двух строках:

.CC = «адрес электронной почты»

.BCC = «адрес электронной почты»

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

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

3. нажмите F5 для запуска кода, то текущий рабочий лист сохраняется как рабочая книга Excel и автоматически вставляется в окно сообщения в виде вложения. Смотрите скриншот:

Примечание: Прикрепленная рабочая книга, содержащая только текущий рабочий лист, имеет то же имя, что и исходная рабочая книга. И время запуска кода также добавляется к имени книги.


2.1.3 Отправить текущую книгу по электронной почте в виде вложения

Изучив код VBA для отправки по электронной почте текущей рабочей таблицы в виде вложения из Excel, здесь мы предоставляем еще один сценарий VBA, который поможет вам отправить по электронной почте всю книгу в виде вложения. Пожалуйста, сделайте следующее.

1. нажмите другой + F11 ключи.

2. В дебюте Microsoft Visual Basic для приложений окна, нажмите Вставить > Модуль. Затем вставьте следующий код VBA в окно модуля (код).

Код VBA: отправьте текущую книгу по электронной почте в виде вложения из Excel

Sub SendWorkBook()
'Update by Extendoffice 20220802
Dim OutlookApp As Object
Dim OutlookMail As Object
Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookMail = OutlookApp.CreateItem(0)
On Error Resume Next
With OutlookMail
    .To = "xxx@aaa.com"
    .CC = "Email Address"
    .BCC = "Email Address"
    .Subject = "kte feature"
    .Body = "Hello, please check and read this document, thank you."
    .Attachments.Add Application.ActiveWorkbook.FullName
    .Display
    '.Send
End With
Set OutlookMail = Nothing
Set OutlookApp = Nothing
End Sub

Ноты:

1) В строке .To = xxx@aaa.com, пожалуйста, замените xxx@aaa.com с реальным адресом электронной почты получателя. Если вам нужно несколько адресов электронной почты, разделите их точкой с запятой.

2) Изменить тему письма и тело письма отдельно в строке .Subject = «особенности kte» и .Body = «Пожалуйста, проверьте и прочитайте этот документ.»;

3) В следующих двух строках:

.CC = «адрес электронной почты»

.BCC = «адрес электронной почты»

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

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

3. нажмите F5 ключ для запуска кода, то текущая книга автоматически вставляется в окно сообщения в качестве вложения. Смотрите скриншот:


2.1.4 Электронная почта всей книги в виде вложения PDF

Большинство людей склонны сохранять книгу Excel в виде файла PDF, а затем отправлять ее другим в виде вложения. В этом разделе я покажу вам способ отправки электронных писем непосредственно из Excel с текущей открытой книгой в виде вложения PDF без необходимости вручную сохранять книгу в виде файла PDF.

1. нажмите другой + F11 ключи.

2. В дебюте Microsoft Visual Basic для приложений окна, нажмите Вставить > Модуль. Затем вставьте следующий код VBA в окно модуля (код).

Код VBA: отправьте всю книгу по электронной почте в виде вложения PDF

Sub SendWorkBookAsPDF()
'Update 20220803
Dim Wb As Workbook
Dim FilePath As String
Dim FileName As String
Dim xOutApp As Object
Dim xOutMail As Object
On Error Resume Next

Application.ScreenUpdating = False
Set Wb = Application.ActiveWorkbook
FileName = Left(Wb.Name, (InStrRev(Wb.Name, ".", -1, vbTextCompare) - 1)) & Format(Now, "dd-mmm-yy h-mm-ss") & ".pdf"
FilePath = Environ$("temp") & "" & FileName

Wb.ExportAsFixedFormat Type:=xlTypePDF, FileName:= _
    FilePath, Quality:=xlQualityStandard, _
    IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
    False

Set xOutApp = CreateObject("Outlook.Application")
Set xOutMail = xOutApp.CreateItem(0)
With xOutMail
       .To = "xxx@aaa.com"
       .CC = "Email Address"
       .BCC = "Email Address"
       .Subject = "test"
       .Body = "test"
       .Attachments.Add FilePath
       .Display   'or use .Send
   End With
Kill FilePath
Set xOutMail = Nothing
Set xOutApp = Nothing
Application.ScreenUpdating = True
End Sub

Ноты:

1) В строке .To = xxx@aaa.com, замените xxx@aaa.com реальным адресом электронной почты получателя. Если вам нужно несколько адресов электронной почты, разделите их точкой с запятой.

2) Изменить тему письма и тело письма отдельно в строке .Subject = «тест» и .Body = «тест»;

3) В следующих двух строках:

.CC = «Адрес электронной почты»

.BCC = «Адрес электронной почты»

Если вы хотите добавить получателей копии и скрытой копии, замените текст «Ваш e-mail» в строках с нужными вам адресами электронной почты.

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

4) Имя файла PDF будет таким же, как имя исходной книги. И время запуска кода также будет добавлено к имени книги. Если вам не нужно добавлять метку времени к имени файла, удалите & Формат (Теперь «дд-ммм-гг ч-мм-сс») со следующей строки.

FileName = Left(Wb.Name, (InStrRev(Wb.Name, «.», -1, vbTextCompare) — 1)) & Format(Now, «dd-mmm-yy h-mm-ss») & «.pdf «

3. нажмите F5 ключ для запуска кода. Затем текущая книга автоматически вставляется в новое окно сообщения в виде вложенного файла PDF. Смотрите скриншот:


2.1.5 Отправьте текущий рабочий лист по электронной почте в виде вложения PDF

Например, есть рабочая книга с названием «Ежемесячные продажи», и вы завершили таблицу отчета о продажах на листе с названием «Отчет о продажах» и хотите отправить эту таблицу в виде файла PDF своим коллегам. Следующий код VBA может оказать вам услугу.

1. нажмите другой + F11 ключи.

2. В дебюте Microsoft Visual Basic для приложений окна, нажмите вставить > Модуль. Затем вставьте следующий код VBA в окно модуля (код).

Код VBA: отправьте текущий рабочий лист по электронной почте в виде вложения PDF

Sub SendWorkSheetToPDF()
'Update by Extendoffice 20220803
Dim Wb As Workbook
Dim FileName As String
Dim OutlookApp As Object
Dim OutlookMail As Object
On Error Resume Next
Set Wb = Application.ActiveWorkbook
FileName = Wb.FullName
xIndex = VBA.InStrRev(FileName, ".")
If xIndex > 1 Then FileName = VBA.Left(FileName, xIndex - 1)
FileName = FileName & "_" + ActiveSheet.Name & ".pdf"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, FileName:=FileName
Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookMail = OutlookApp.CreateItem(0)
With OutlookMail
    .To = "xxx@aaa.com"
    .CC = "Email Address"
    .BCC = "Email Address"
    .Subject = "test"
    .Body = "test"
    .Attachments.Add FileName
    .Display
    '.Send
End With
Kill FileName
Set OutlookMail = Nothing
Set OutlookApp = Nothing
End Sub

Ноты:

1) В строке .To = xxx@aaa.com, пожалуйста, замените xxx@aaa.com с реальным адресом электронной почты получателя. Если вам нужно несколько адресов электронной почты, разделите их точкой с запятой.

2) Изменить тему письма и тело письма отдельно в строке .Subject = «тест» и .Body = «тест»;

3) В следующих двух строках:

.CC = «Адрес электронной почты»

.BCC = «Адрес электронной почты»

Если вы хотите добавить получателей копии и скрытой копии, замените текст «Ваш e-mail» в строках с нужными вам адресами электронной почты.

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

4) Имя файла PDF будет: имя исходной книги_имя исходного листа. В этом случае имя файла PDF будет Ежемесячный отчет о продажах_продажи.

3. нажмите F5 ключ для запуска кода. Затем текущий рабочий лист автоматически вставляется в новое окно сообщения в виде вложения файла PDF. Смотрите скриншот:


2.2 Вставьте подпись Outlook в электронные письма, отправленные из Excel

Возьмем приведенный выше случай в качестве примера: вы применяете приведенный выше код VBA для отправки текущего рабочего листа в виде вложения PDF-файла из Excel, но подпись Outlook не может быть добавлена ​​в окно сообщения. Чтобы сохранить подпись Outlook по умолчанию в электронном письме, отправленном из Excel, поможет следующий метод.

Два кода VBA перечислены ниже.

Код VBA 1: код помогает сохранить подпись Outlook.

Код VBA 2: код помогает отправить текущий рабочий лист по электронной почте в виде вложения PDF.

Код VBA 1: сохранить подпись Outlook

.HTMLBody = "Email body" & "
" & .HTMLBody

Код VBA 2: отправить текущий рабочий лист по электронной почте в виде вложения PDF

Sub SendWorkSheetToPDF()
'Update by Extendoffice 20220803
Dim Wb As Workbook
Dim FileName As String
Dim OutlookApp As Object
Dim OutlookMail As Object
On Error Resume Next
Set Wb = Application.ActiveWorkbook
FileName = Wb.FullName
xIndex = VBA.InStrRev(FileName, ".")
If xIndex > 1 Then FileName = VBA.Left(FileName, xIndex - 1)
FileName = FileName & "_" + ActiveSheet.Name & ".pdf"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, FileName:=FileName
Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookMail = OutlookApp.CreateItem(0)
With OutlookMail
    .To = "xxx@aaa.com"
    .CC = "Email Address"
    .BCC = "Email Address"
    .Subject = "test"
    .Body = "test"
    .Attachments.Add FileName
    .Display
    '.Send
End With
Kill FileName
Set OutlookMail = Nothing
Set OutlookApp = Nothing
End Sub

1. Обычно вам нужно нажать кнопку другой + F11 , чтобы открыть Microsoft Visual Basic для приложений окно.

2. в Microsoft Visual Basic для приложений окна, нажмите Вставить > Модули. Затем вставьте указанный выше код VBA 2 в окно «Модуль (код)».

3. Чтобы сохранить подпись Outlook по умолчанию в электронном письме, отправленном из Excel, вам необходимо изменить код VBA 2 следующим образом:

1) Заменить .Тело линия с Код VBA 1;

2) Переместить линию .Отображать под линией С OutlookMail (или с xMailOut в других кодах). Смотрите скриншот:

Вот полный код после модификации.

Sub SendWorkSheetToPDF()
'Update by Extendoffice 20220803
Dim Wb As Workbook
Dim FileName As String
Dim OutlookApp As Object
Dim OutlookMail As Object
On Error Resume Next
Set Wb = Application.ActiveWorkbook
FileName = Wb.FullName
xIndex = VBA.InStrRev(FileName, ".")
If xIndex > 1 Then FileName = VBA.Left(FileName, xIndex - 1)
FileName = FileName & "_" + ActiveSheet.Name & ".pdf"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, FileName:=FileName
Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookMail = OutlookApp.CreateItem(0)
With OutlookMail
    .Display
    .To = "xxx@aaa.com"
    .CC = "Email Address"
    .BCC = "Email Address"
    .Subject = "test"
    .HTMLBody = "Email body" & "
" & .HTMLBody .Attachments.Add FileName '.Send End With Kill FileName Set OutlookMail = Nothing Set OutlookApp = Nothing End Sub

4. нажмите F5 ключ для запуска кода. Затем вы получите новое окно сообщения с текущим рабочим листом, прикрепленным в виде файла PDF, а подпись Outlook по умолчанию будет автоматически вставлена ​​в конец тела электронной почты.


3. Автоматически отправлять электронные письма из Excel при выполнении условия (с помощью сценариев VBA)

В приведенных выше примерах вам нужно запустить код вручную, чтобы добиться доставки электронной почты. Если вы хотите активировать код автоматически при выполнении определенного условия, например, когда ячейка достигает определенного значения, когда значение ячейки изменяется, когда достигается дата и т. д., электронное письмо будет отправлено автоматически. В этом разделе перечислены условия, которые пользователи Excel часто искали в Google, чтобы помочь вам автоматически отправлять электронные письма из Excel при выполнении определенного условия.

3.1 Автоматически отправлять электронное письмо, когда ячейка достигает определенного значения

Как показано на снимке экрана ниже, предположим, что у вас есть таблица продаж с ячейкой D6, содержащей общую сумму продаж. Вы хотите автоматически отправлять электронное письмо своему начальнику на основе общего объема продаж, например, создать или отправить электронное письмо автоматически, когда общий объем продаж превышает 10000 10000, но если общий объем продаж равен или меньше XNUMX XNUMX, никаких действий не предпринимается.

1. На рабочем листе содержится таблица продаж, щелкните правой кнопкой мыши вкладку листа и выберите Посмотреть код из контекстного меню.

2. В дебюте Microsoft Visual Basic для приложений окно, вставьте следующий код VBA в Лист (Код) окно.

Код VBA: автоматически отправлять электронное письмо, когда ячейка достигает определенного значения в Excel

Dim xRg As Range
'Update by Extendoffice 20200803
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Cells.Count > 1 Then Exit Sub
Set xRg = Intersect(Range("D6"), Target)
If xRg Is Nothing Then Exit Sub
If IsNumeric(Target.Value) And Target.Value > 10000 Then
Call Mail_small_Text_Outlook
End If
End Sub
Sub Mail_small_Text_Outlook()
Dim xOutApp As Object
Dim xOutMail As Object
Dim xMailBody As String
Set xOutApp = CreateObject("Outlook.Application")
Set xOutMail = xOutApp.CreateItem(0)
xMailBody = "Hi boss" & vbNewLine & vbNewLine & _
"Total sales of over $10,000 in January: " & Range("D6")
On Error Resume Next
With xOutMail
.To = "xxx@aaa.com"
.CC = "Email address"
.BCC = "Email address"
.Subject = "test"
.Body = xMailBody
.Display 'or use .Send
End With
On Error GoTo 0
Set xOutMail = Nothing
Set xOutApp = Nothing
End Sub

Private Sub Worksheet_Calculate()
Dim xI As Integer
Dim xRg As Range
Set xRg = Range("D6")
On Error GoTo Err01
xI = Int(xRg.Value)
If xI > 10000 Then
Call Mail_small_Text_Outlook
End If
Err01:
End Sub

Заметки:

1) D6 это ячейка, значение которой вы будете отправлять по электронной почте на основе.

2) > 10000 это условие, которое означает, что электронное письмо будет отправлено, когда значение в D6 больше 10000.

3) Диапазон («D6») в следующей строке означает, что тело электронной почты будет ссылаться на значение в D6.

xMailBody = "Hi boss" & vbNewLine & vbNewLine & _
"Total sales of over $10,000 in January: " & Range("D6")

4) В строке .To = xxx@aaa.com, пожалуйста, замените xxx@aaa.com с реальным адресом электронной почты получателя. Если вам нужно несколько адресов электронной почты, разделите их точкой с запятой.

5) Изменить тему письма в строке .Subject = «тест».

6) В следующих двух строках:

.CC = «Адрес электронной почты»

.СК = «Адрес электронной почты»

Если вы хотите добавить получателей копии и скрытой копии, замените текст «Ваш e-mail» в строках с нужными вам адресами электронной почты.

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

С этого момента, когда значение в ячейке D6 превысит 10000, будет создано электронное письмо, как показано на снимке экрана ниже.


3.2 Автоматически отправлять электронное письмо при изменении значения ячейки

Как показано на снимке экрана ниже, предположим, что вы получили книгу, содержащую ежемесячные продажи на разных листах и ​​общую сумму продаж на листе. Вам необходимо проверить общий объем продаж и, если общий объем продаж изменен, отправить книгу обратно отправителю и сообщить отправителю, что ячейка была изменена.

1. На рабочем листе содержится таблица продаж, щелкните правой кнопкой мыши вкладку листа и выберите Посмотреть код из контекстного меню.

2. В дебюте Microsoft Visual Basic для приложений вставьте следующий код VBA в окно Sheet (Code).

Код VBA: автоматически отправлять электронное письмо при изменении указанного значения ячейки

Private Sub Worksheet_Change(ByVal Target As Range)
'Updated by Extendoffice 20220803
Dim xRgSel As Range
Dim xOutApp As Object
Dim xMailItem As Object
Dim xMailBody As String
Dim xBoolean As Boolean
Dim xItsRG As Range
Dim xDDs As Range
Dim xDs As Range
On Error Resume Next
Application.ScreenUpdating = False
Application.DisplayAlerts = False
xBoolean = False
Set xRg = Range("B14")

Set xItsRG = Intersect(Target, xRg)
Set xDDs = Intersect(Target.DirectDependents, xRg)
Set xDs = Intersect(Target.Dependents, xRg)
If Not (xItsRG Is Nothing) Then
Set xRgSel = xItsRG
xBoolean = True
ElseIf Not (xDDs Is Nothing) Then
Set xRgSel = xDDs
xBoolean = True
ElseIf Not (xDs Is Nothing) Then
Set xRgSel = xDs
xBoolean = True
End If

ActiveWorkbook.Save
If xBoolean Then
Debug.Print xRgSel.Address

Set xOutApp = CreateObject("Outlook.Application")
Set xMailItem = xOutApp.CreateItem(0)
xMailBody = "The cell " & xRgSel.Address(False, False) & _
" in the worksheet '" & Me.Name & "' were modified on " & _
Format$(Now, "mm/dd/yyyy") & " at " & Format$(Now, "hh:mm:ss") & _
" by " & Environ$("username") & "."

With xMailItem
.To = "xxx@aaa.com"
.CC = "Email address"
.BCC = "Email address"
.Subject = "Worksheet modified"
.Body = xMailBody
.Attachments.Add (ThisWorkbook.FullName)
.Display
End With
Set xRgSel = Nothing
Set xOutApp = Nothing
Set xMailItem = Nothing
End If
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub

Заметки: В коде

1) B14 в коде означает, что при изменении значения ячейки B14 вы отправите электронное письмо.

2) В строке .To = xxx@aaa.com, пожалуйста, замените xxx@aaa.com с реальным адресом электронной почты получателя. Если вам нужно несколько адресов электронной почты, разделите их точкой с запятой.

3) Изменить тему письма в строке .Subject = «Рабочий лист изменен».

4) В следующих двух строках:

.CC = «Адрес электронной почты»

.BCC = «Адрес электронной почты»

Если вы хотите добавить получателей копии и скрытой копии, замените текст «Ваш e-mail» в строках с нужными вам адресами электронной почты.

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

Отныне при изменении значения в ячейке B14 сообщение Outlook будет создаваться автоматически, как показано на снимке экрана ниже.


3.3 Автоматически отправлять электронное письмо при сохранении книги

Если у вас есть рабочая книга, которой необходимо поделиться с другими после изменения, обычно вам нужно сохранить рабочую книгу, запустить почтовый клиент, создать новое электронное письмо с прикрепленной этой рабочей книгой, заполнить соответствующие поля и отправить электронное письмо. В этом разделе будет показан способ автоматического создания электронного письма каждый раз при сохранении книги. Пожалуйста, сделайте следующее.

1. нажмите другой + F11 , чтобы открыть Microsoft Visual Basic для приложений окно.

2. В этом окне дважды щелкните Эта рабочая тетрадь в Проекты под застройку панели, затем вставьте следующий код VBA в ThisWorkbook (Код) окно.

Код VBA: автоматически отправлять электронное письмо при сохранении книги

Private Sub Workbook_AfterSave(ByVal Success As Boolean)
'Updated by Extendoffice 20220804
    Dim xOutApp As Object
    Dim xMailItem As Object
    Dim xName As String
    On Error Resume Next
    Set xOutApp = CreateObject("Outlook.Application")
    Set xMailItem = xOutApp.CreateItem(0)
    xName = ActiveWorkbook.FullName
    With xMailItem
        .To = "xxx@aaa.com"
        .CC = "Email address"
        .BCC = "Email address"
        .Subject = "The workbook has been updated"
        .Body = "Hi," & Chr(13) & Chr(13) & "File is now updated."
        .Attachments.Add xName
        .Display
       '.send
    End With
    Set xMailItem = Nothing
    Set xOutApp = Nothing
End Sub

Заметки: В коде

1) В строке .To = xxx@aaa.com, пожалуйста, замените xxx@aaa.com с реальным адресом электронной почты получателя. Если вам нужно несколько адресов электронной почты, разделите их точкой с запятой.

2) Изменить тему и тело письма отдельно в строках .Subject = «Книга обновлена» и .Body = «Привет,» & Chr(13) & Chr(13) & «Файл обновлен»..

3) В следующих двух строках:

.CC = «Адрес электронной почты»

.BCC = «Адрес электронной почты»

Если вы хотите добавить получателей копии и скрытой копии, замените текст «Ваш e-mail» в строках с нужными вам адресами электронной почты.

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

3. Отныне при сохранении книги нажатием кнопки Ctrl + S клавиши или нажав кнопку Сохраните кнопка, электронная почта Outlook будет создана автоматически. Вы можете видеть, что текущая рабочая книга прикреплена как вложение, а поля заполнены указанным содержимым. Смотрите скриншот:

Tips: Если вы часто используете эту книгу, здесь рекомендуется сохранить книгу как Excel Macro-Enabled Workbook чтобы сохранить сценарий VBA для использования в будущем. Шаги следующие.

1) Нажмите Файл > Сохранить как, а затем выберите папку для сохранения файла.

2). Сохранить как диалоговое окно, переименуйте файл, как вам нужно в Имя файла текстовое поле, выберите Excel Macro-Enabled Workbook в Сохранить как раскрывающийся список и, наконец, щелкните Сохраните кнопка. Смотрите скриншот:


3.4 Автоматически отправлять электронное письмо в определенное время

Допустим, вам нужно отправить кому-то электронное письмо с рабочей тетрадью назначения задач. каждую пятницу в 9 утраи хотите сделать это автоматически в Excel без необходимости вручную управлять почтовым клиентом. Этот раздел покажет вам, как это сделать.

1. нажмите другой + F11 , чтобы открыть Microsoft Visual Basic для приложений окно.

2. в Microsoft Visual Basic для приложений окна, нажмите Вставить > Модуль. Затем вставьте следующий код VBA в окно модуля.

VBA code1: отправить текущую книгу по электронной почте в виде вложения из Excel

Sub Timer()
    If Weekday(Date) = vbFriday Then
        SendWorkBook
        Application.OnTime TimeValue("09:00:00"), "Timer"
    Else
        Application.OnTime TimeValue("09:00:00"), "Timer"
    End If
End Sub

Sub SendWorkBook()
'Update by Extendoffice 20220802
Dim OutlookApp As Object
Dim OutlookMail As Object
Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookMail = OutlookApp.CreateItem(0)
On Error Resume Next
With OutlookMail
    .To = "xxx@aaa.com"
    .CC = "Email Address"
    .BCC = "Email Address"
    .Subject = "kte feature"
    .Body = "Hello, please check and read this document, thank you."
    .Attachments.Add Application.ActiveWorkbook.FullName
    .Display
    '.Send
End With
Set OutlookMail = Nothing
Set OutlookApp = Nothing
End Sub

3. В этом окне дважды щелкните Эта рабочая тетрадь в Проекты под застройку панели, затем вставьте следующий код VBA в ThisWorkbook (Код) окно.

Код VBA 2: автоматически отправлять электронное письмо в определенное время

Private Sub Workbook_Open()
    Application.OnTime TimeValue("09:00:00"), "Timer"
End Sub

Заметки:

1) В коде VBA 1, пятница в следующей строке означает, что письмо будет отправляться автоматически каждую пятницу;

Если День(Дата) = vbFriday Тогда

2) В коде VBA 1 и коде VBA 2 время 09: 00: 00 означает, что письмо будет отправлено в 9 утра в определенный день.

Вы можете изменить день и время, как вам нужно.

3) Когда код запустится, будет создано электронное письмо. Если вы не хотите, чтобы всплывающее окно сообщения было отправлено напрямую, удалите строку .Отображать из кода VBA 1 и удалите апостроф перед линией ‘.Отправлять.

4. Сохраните коды, а затем сохраните книгу как книгу Excel с поддержкой макросов следующим образом.

4.1) Нажмите Файл > Сохранить как, а затем выберите папку для сохранения файла.

4.2). Сохранить как диалоговое окно, переименуйте файл, как вам нужно в Имя файла текстовое поле, выберите Excel Macro-Enabled Workbook в Сохранить как раскрывающийся список и, наконец, щелкните Сохраните кнопка. Смотрите скриншот:

5. Откройте сохраненную книгу с поддержкой макросов, после чего электронное письмо будет создано или отправлено автоматически, когда наступит день и время.


4. Дополнительные темы

В этом разделе собраны другие темы, с которыми вы можете столкнуться при отправке электронных писем из Excel.

4.1 Электронная почта диапазона ячеек из Excel (с помощью скрипта VBA)

Предположим, что на листе Excel есть ежемесячная таблица продаж, как показано на снимке экрана ниже, и вам нужно отправить эту ежемесячную таблицу продаж другим пользователям в виде содержимого электронного письма или непосредственно в виде вложения. Здесь мы предлагаем вам два способа сделать это.

4.1.1 Электронная почта диапазона как часть основного содержимого из Excel

Вы можете запустить следующий код VBA, чтобы отправить диапазон ячеек как часть содержимого тела электронной почты из Excel.

1. нажмите другой + F11 , чтобы открыть Microsoft Visual Basic для приложений окно.

2. в Microsoft Visual Basic для приложений окна, нажмите Tools
> Рекомендации. А затем проверьте Библиотека объектов Microsoft Outlook 16.0 поле и нажмите OK в Ссылки — VBAProject диалоговое окно.

3. Нажмите Вставить > Модули, затем вставьте следующий код VBA в Модуль (код) окно.

Код VBA: отправьте диапазон ячеек как часть содержимого тела электронной почты из Excel.

Sub SendARangeofCells()
'Updated by Extendoffice 20220809
    Dim xRg As Range
    Dim I, J As Long
    Dim xAddress As String
    Dim xMailOut As Object
    Dim xOutApp As Object
    On Error Resume Next
    Set xOutApp = CreateObject("Outlook.Application")
    Set xMailOut = xOutApp.CreateItem(olMailItem)
    xAddress = ActiveWindow.RangeSelection.Address
    Set xRg = Application.InputBox("Please select range you need to paste into email body", "KuTools For Excel", xAddress, , , , , 8)
If xRg Is Nothing Then Exit Sub
Application.ScreenUpdating = False
    Set xOutApp = CreateObject("Outlook.Application")
    Set xMailOut = xOutApp.CreateItem(olMailItem)
    With xMailOut
        .Subject = "test"
        .To = "xxx@aaa.com"
        .CC = "Email address"
        .BCC = "Email address"
        .HTMLBody = RangetoHTML(xRg)
        .Display
        '.Send
    End With
    Set xMailOut = Nothing
    Set xOutApp = Nothing
    Application.ScreenUpdating = True
End Sub

 ' The following VBA script is cited from this page:
 ' https://stackoverflow.com/questions/18663127/paste-excel-range-in-outlook
Function RangetoHTML(rng As Range)
' By Ron de Bruin.
    Dim fso As Object
    Dim ts As Object
    Dim TempFile As String
    Dim TempWB As Workbook

    TempFile = Environ$("temp") & "/" & Format(Now, "dd-mm-yy h-mm-ss") & ".htm"

    'Copy the range and create a new workbook to past the data in
    rng.Copy
    Set TempWB = Workbooks.Add(1)
    With TempWB.Sheets(1)
        .Cells(1).PasteSpecial Paste:=8
        .Cells(1).PasteSpecial xlPasteValues, , False, False
        .Cells(1).PasteSpecial xlPasteFormats, , False, False
        .Cells(1).Select
        Application.CutCopyMode = False
        On Error Resume Next
        .DrawingObjects.Visible = True
        .DrawingObjects.Delete
        On Error GoTo 0
    End With

    'Publish the sheet to a htm file
    With TempWB.PublishObjects.Add( _
         SourceType:=xlSourceRange, _
         Filename:=TempFile, _
         Sheet:=TempWB.Sheets(1).Name, _
         Source:=TempWB.Sheets(1).UsedRange.Address, _
         HtmlType:=xlHtmlStatic)
        .Publish (True)
    End With

    'Read all data from the htm file into RangetoHTML
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set ts = fso.GetFile(TempFile).OpenAsTextStream(1, -2)
    RangetoHTML = ts.ReadAll
    ts.Close
    RangetoHTML = Replace(RangetoHTML, "align=center x:publishsource=", _
                          "align=left x:publishsource=")

    'Close TempWB
    TempWB.Close savechanges:=False

    'Delete the htm file we used in this function
    Kill TempFile

    Set ts = Nothing
    Set fso = Nothing
    Set TempWB = Nothing
End Function

Заметки: В коде

1) В строке .To = xxx@aaa.com, пожалуйста, замените xxx@aaa.com с реальным адресом электронной почты получателя. Если вам нужно несколько адресов электронной почты, разделите их точкой с запятой.

2) В следующих двух строках:

.CC = «Адрес электронной почты»

.BCC = «Адрес электронной почты»

Если вы хотите добавить получателей копии и скрытой копии, замените текст «Ваш e-mail» в строках с нужными вам адресами электронной почты.

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

4. нажмите F5 ключ для запуска кода. Во всплывающем окне Kutools for Excel диалоговое окно, выберите диапазон ячеек, которые необходимо отправить как часть содержимого сообщения электронной почты, затем щелкните OK. Смотрите скриншот:

Затем электронная почта Outlook будет создана автоматически. Вы можете видеть, что диапазон, выбранный вами на листе, вставлен в тело электронной почты. Смотрите скриншот:


4.1.2 Электронная почта диапазона в виде вложения из Excel

Если вам нужно отправить по электронной почте диапазон ячеек на листе в виде вложения из Excel. Вы можете попробовать следующий код VBA.

1. нажмите другой + F11 ключи.

2. В дебюте Microsoft Visual Basic для приложений окна, нажмите Вставить > Модули. Затем вставьте следующий код VBA в Модуль (код) окно.

Код VBA: диапазон по электронной почте в виде вложения из Excel

Sub SendRange()
'Update 20220809
Dim xFile As String
Dim xFormat As Long
Dim Wb As Workbook
Dim Wb2 As Workbook
Dim Ws As Worksheet
Dim FilePath As String
Dim FileName As String
Dim OutlookApp As Object
Dim OutlookMail As Object
Dim WorkRng As Range
xTitleId = "KutoolsforExcel"
Set WorkRng = Application.Selection
Set WorkRng = Application.InputBox("Range", xTitleId, WorkRng.Address, Type:=8)
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set Wb = Application.ActiveWorkbook
Wb.Worksheets.Add
Set Ws = Application.ActiveSheet
WorkRng.Copy Ws.Cells(1, 1)
Ws.Copy
Set Wb2 = Application.ActiveWorkbook
Select Case Wb.FileFormat
Case xlOpenXMLWorkbook:
    xFile = ".xlsx"
    xFormat = xlOpenXMLWorkbook
Case xlOpenXMLWorkbookMacroEnabled:
    If Wb2.HasVBProject Then
        xFile = ".xlsm"
        xFormat = xlOpenXMLWorkbookMacroEnabled
    Else
        xFile = ".xlsx"
        xFormat = xlOpenXMLWorkbook
    End If
Case Excel8:
    xFile = ".xls"
    xFormat = Excel8
Case xlExcel12:
    xFile = ".xlsb"
    xFormat = xlExcel12
End Select
FilePath = Environ$("temp") & ""
FileName = Wb.Name & Format(Now, "dd-mmm-yy h-mm-ss")
Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookMail = OutlookApp.CreateItem(0)
Wb2.SaveAs FilePath & FileName & xFile, FileFormat:=xFormat
With OutlookMail
    .To = "xxx@aaa.com"
    .CC = "Email address"
    .BCC = "Email address"
    .Subject = "Monthly sales for 2021"
    .Body = "Hello, please check and read this document. "
    .Attachments.Add Wb2.FullName
    .Display
    '.Send
End With
Wb2.Close
Kill FilePath & FileName & xFile
Set OutlookMail = Nothing
Set OutlookApp = Nothing
Ws.Delete
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub

Заметки:

1) В строке .To = xxx@aaa.com, пожалуйста, замените xxx@aaa.com с реальным адресом электронной почты получателя. Если вам нужно несколько адресов электронной почты, разделите их точкой с запятой.

2) Изменить тему письма и тело письма отдельно в строке .Subject = «Ежемесячные продажи на 2021 год» и .Body = «Здравствуйте, проверьте и прочитайте этот документ.»;

3) В следующих двух строках:

.CC = «адрес электронной почты»

.BCC = «адрес электронной почты»

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

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

3. нажмите F5 ключ для запуска кода. Во всплывающем окне Kutools for Excel диалоговое окно, выберите диапазон ячеек, который необходимо отправить в качестве вложения в сообщение электронной почты, затем щелкните OK. Смотрите скриншот:

Затем электронная почта Outlook будет создана автоматически. И диапазон ячеек, выбранных вами на листе, сохраняется как книга Excel и прикрепляется к окну сообщения. Смотрите скриншот:


4.2 Отправка электронных писем при нажатии кнопки в Excel

Если вам нужно щелкнуть командную кнопку, чтобы вызвать макрос для отправки электронной почты из Excel, например, отправьте текущую книгу в качестве вложения другим, нажав командную кнопку на рабочем листе. Вы можете выполнить следующие шаги, чтобы сделать это.

1. Нажмите Застройщик > Вставить > Командная кнопка (элемент управления ActiveX). Затем нарисуйте командную кнопку на листе.

Tips: если у вас уже есть командная кнопка, пропустите этот шаг.

2. нажмите другой + F11 , чтобы открыть Microsoft Visual Basic для приложений окно. В окне нажмите Вставить > Модуль, затем вставьте код VBA (код, используемый для отправки текущей книги по электронной почте в виде вложения из Excel) в окно модуля (код).

Нажмите сюда чтобы получить код.

Внимание: здесь имя макроса, созданного на шаге 2, ОтправитьКнигу.

3. нажмите другой + Q ключи, чтобы закрыть Microsoft Visual Basic для приложений окно.

4. Теперь нужно назначить макрос на командную кнопку. Щелкните правой кнопкой мыши командную кнопку, выберите Просмотреть код из контекстного меню.

5. Затем Microsoft Visual Basic для приложений всплывающее окно, вы можете увидеть следующие две строки, перечисленные в Лист (Код) окно.

Private Sub CommandButton1_Click()
End Sub

6. Введите имя существующего макроса внутри подпроцедуры для командной кнопки.

7. нажмите другой + Q ключи, чтобы закрыть Редактор Visual Basicи нажмите Застройщик > Режим проектирования чтобы выключить режим дизайна.

Теперь вы можете нажать кнопку команды, чтобы отправить электронное письмо с текущей книгой в качестве вложения в электронное письмо.


4.3 Отправка писем с указанной учетной записи электронной почты

Обычно при запуске электронной почты из Excel с кодом VBA учетная запись электронной почты отправителя является учетной записью по умолчанию в Outlook. Предположим, вы настроили несколько учетных записей электронной почты в своем Outlook и хотите использовать определенную учетную запись для отправки электронных писем из Excel вместо использования учетной записи по умолчанию. Следующий код VBA может помочь.

В этом случае необходимы следующие коды.

Код VBA 1:

Dim OutlookMail As Outlook.MailItem

Код VBA 2:

For Each xAccount In OutlookApp.Session.Accounts
  If VBA.LCase(xAccount.SmtpAddress) = VBA.LCase("zxm@addin99.com") Then 'Specify your email account here
    OutlookMail.SendUsingAccount = xAccount
  End If
Next

Как использовать приведенный выше код VBA?

1) В собственном коде нужно заменить строку типа «Dim OutlookMail как объект” с кодом VBA 1;

2) Добавьте код VBA 2 под строкой «On Error Resume Next” в вашем коде. Затем укажите адрес электронной почты, который вы будете использовать для отправки электронной почты в коде VBA 2.

В этом примере мы собираемся указать определенную учетную запись электронной почты для отправки текущей книги в виде вложения из Excel. Пожалуйста, сделайте следующее.

1. нажмите другой + F11 ключи. в Microsoft Visual Basic для приложений окна, нажмите Tools
> Рекомендации. А затем проверьте Библиотека объектов Microsoft Outlook 16.0 поле и нажмите OK в Ссылки — VBAProject диалоговое окно.

2. Нажмите Вставить > Модули. Затем вставьте следующий код VBA в Модуль (код) окно.

Код VBA: отправить текущую книгу в виде вложения электронной почты из Excel через указанную учетную запись Outlook.

Sub SendWorkBook()
'Update by Extendoffice 20220809
Dim OutlookApp As Object
Dim OutlookMail As Outlook.MailItem 'important! Here can’t be declared as Object
Dim xAccount As Account
Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookMail = OutlookApp.CreateItem(olMailItem)
On Error Resume Next
'The following lines helps to specify a certian email account
For Each xAccount In OutlookApp.Session.Accounts
  If VBA.LCase(xAccount.SmtpAddress) = VBA.LCase("zxm@addin99.com") Then 'Specify your email account here
    OutlookMail.SendUsingAccount = xAccount
  End If
Next
'End
With OutlookMail
    .To = "xxx@aaa.com"
    .CC = "Email Address"
    .BCC = "Email Address"
    .Subject = "kte feature"
    .Body = "Hello, please check and read this document, thank you."
    .Attachments.Add Application.ActiveWorkbook.FullName
    .Display
    '.Send
End With
Set OutlookMail = Nothing
Set OutlookApp = Nothing
End Sub

3. нажмите F5 ключ для запуска кода. Затем появляется сообщение электронной почты Outlook, вы можете видеть, что от Поле заполняется учетной записью электронной почты, которую вы указали в коде.


4.4 Отправить электронное письмо, когда наступит дата

Если вам нужно отправить электронное письмо на основе определенной даты выполнения, например, как показано на снимке экрана ниже, есть таблица проекта, когда срок выполнения в диапазоне E2:E7 равен или меньше 7 дней от сегодняшнего дня (при условии, что текущая дата — 2022/8/4), руководителям соответствующих проектов будет автоматически отправлено электронное письмо с уведомлением о скором истечении срока действия проекта.

1. На рабочем листе содержится таблица проекта, щелкните правой кнопкой мыши вкладку листа и выберите Посмотреть код из контекстного меню.

2. В дебюте Microsoft Visual Basic для приложений окно, вставьте следующий код VBA в Лист (Код) окно.

Код VBA: автоматически отправлять электронное письмо при наступлении срока

Public Sub SendMailDueDate()
'Updated by Extendoffice 20220804
Dim xRgDate As Range
Dim xRgSend As Range
Dim xRgText As Range
Dim xRgDone As Range
Dim xOutApp As Object
Dim xMailItem As Object
Dim xLastRow As Long
Dim vbCrLf As String
Dim xMailBody As String
Dim xRgDateVal As String
Dim xRgSendVal As String
Dim xMailSubject As String
Dim i As Long
On Error Resume Next
Set xRgDate = Range("E2:E7") 'Please reference the due date column range
If xRgDate Is Nothing Then Exit Sub
Set xRgSend = Range("C2:C7") 'Please reference the email addresses column range
If xRgSend Is Nothing Then Exit Sub
Set xRgText = Range("D2:D7") 'Please reference the remark column range (the remark used to notify project leaders of the expiration of the project)
If xRgText Is Nothing Then Exit Sub
xLastRow = xRgDate.Rows.Count
Set xRgDate = xRgDate(1)
Set xRgSend = xRgSend(1)
Set xRgText = xRgText(1)
Set xOutApp = CreateObject("Outlook.Application")
For i = 1 To xLastRow
xRgDateVal = ""
xRgDateVal = xRgDate.Offset(i - 1).Value
If xRgDateVal <> "" Then
If CDate(xRgDateVal) - Date <= 7 And CDate(xRgDateVal) - Date > 0 Then
xRgSendVal = xRgSend.Offset(i - 1).Value
xMailSubject = xRgText.Offset(i - 1).Value & " on " & xRgDateVal
vbCrLf = "

" xMailBody = "" xMailBody = xMailBody & "Dear " & xRgSendVal & vbCrLf xMailBody = xMailBody & "Remark : " & xRgText.Offset(i - 1).Value & vbCrLf xMailBody = xMailBody & "" Set xMailItem = xOutApp.CreateItem(0) With xMailItem .Subject = xMailSubject .To = xRgSendVal .CC = "Email address" .BCC = "Email address" .HTMLBody = xMailBody .Display '.Send End With Set xMailItem = Nothing End If End If Next Set xOutApp = Nothing End Sub

Заметки: В коде

1) В следующих строках E2: E7 содержит сроки выполнения, на основе которых вы будете отправлять электронные письма. C2: C7 содержит адреса электронной почты, на которые вы будете отправлять электронные письма. А также D2: D7 содержит примечания, которые вы добавите в тело электронного письма, чтобы уведомить получателей о том, что срок действия проекта истекает. Вы можете изменить диапазоны по мере необходимости.

Установить xRgDate = диапазон («E2: E7»)

Установите xRgSend = Диапазон («C2: C7»)

Установите xRgText = Диапазон («D2: D7»)

2) Следующая строка означает, что срок выполнения должен быть больше 1 дня и равен или меньше 7 дней от сегодняшнего дня. Вы можете изменить его по мере необходимости.

Если CDate(xRgDateVal) — Дата <= 7 И CDate(xRgDateVal) — Дата > 0 Тогда

3) В строке .To = xxx@aaa.com, пожалуйста, замените xxx@aaa.com с реальным адресом электронной почты получателя. Если вам нужно несколько адресов электронной почты, разделите их точкой с запятой.

4) Изменить тему письма в строке .Subject = «Рабочий лист изменен».

5) В следующих двух строках:

.CC = «Адрес электронной почты»

.BCC = «Адрес электронной почты»

Если вы хотите добавить получателей копии и скрытой копии, замените текст «Ваш e-mail» в строках с нужными вам адресами электронной почты.

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

3. нажмите F5 ключ для запуска кода. Затем, если срок действия соответствует условиям, будет создано соответствующее электронное письмо. В этом случае будут созданы два письма, как показано на скриншоте ниже.


5. Удобный инструмент, который поможет вам легко отправлять электронные письма из Excel.

Если вы новичок в VBA, описанные выше методы могут оказаться для вас непростыми. Здесь мы рекомендуем Kutools for ExcelАвтора Отправить письма функция, с помощью которой вы можете легко отправлять электронные письма из Excel всего несколькими щелчками мыши. Пожалуйста, сделайте следующее.

5.1 Легко создавайте список рассылки, включающий нужные поля электронной почты

Прежде чем применять функцию отправки электронных писем, вам необходимо создать список рассылки, содержащий необходимые поля электронной почты. Здесь может помочь функция «Создать список рассылки».

1. Нажмите Кутулс Плюс > Создать список рассылки.

2. В дебюте Создать список рассылки окно необходимо настроить следующим образом.

2.1). Столбцы для списка рассылки раздел, отметьте нужные поля в письме;

2.2). Прикрепить файлы раздел, отметьте одно или несколько вложений, которые могут вам понадобиться;

2.3) Указать место для размещения списка рассылки;

2.4) Нажмите Создавай кнопка. Смотрите скриншот:

Затем создается образец таблицы списка рассылки, как показано на снимке экрана ниже.

3. Теперь вам нужно заменить исходные данные в образце своими полевыми данными.

Теперь вы создали таблицу списка рассылки. Пожалуйста, продолжайте применять Отправить письма возможность отправлять электронные письма из Excel на основе созданных вами полей.

  Если вы хотите получить бесплатную пробную версию (30-день) этой утилиты, пожалуйста, нажмите, чтобы загрузить это, а затем перейдите к применению операции в соответствии с указанными выше шагами.


5.2 Легко отправлять электронные письма, включая поля, которые вы создали в списке рассылки

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

1. Выберите весь список рассылки, нажмите Кутулс Плюс > Отправить письма.

2. в Отправить письма диалоговое окно, выполните следующую настройку.

2.1) Поля заполняются в диалоговое окно каждого поля автоматически полями, указанными вами в списке рассылки;

Tips: если вам не нужно определенное поле в данный момент, выберите пустой вариант в раскрывающемся списке.

2.2) Вставить заполнитель (необязательно): если вам нужно вставить переменную информацию в тело письма.

Например, вам может потребоваться отправить электронное письмо нескольким получателям с персонализированным именем для каждого из них, вам нужно поместить курсор в тело электронного письма, где вам нужно вставить заполнитель, выберите поле «Э: Имя” (или другое поле имени в списке рассылки), а затем нажмите кнопку Вставить Заполнитель кнопка;

Когда получатели получают электронное письмо, тело письма остается прежним, но имена уникальны для каждого.

2.3) Составьте тело письма по своему усмотрению;

2.4) Убедитесь, что Отправлять электронные письма через Outlook флажок установлен;

2.5) Нажмите Отправить кнопка. Смотрите скриншот:

3. Затем Kutools for Excel диалоговое окно всплывает, чтобы сообщить вам, сколько писем отправлено, нажмите OK кнопку, чтобы закрыть это диалоговое окно.

Tips: Вы можете перейти в Отправленные вещи папку в Outlook, чтобы проверить отправленные вами электронные письма.


5.3 Легко отправлять электронные письма с телом HTML (включая гиперссылку, изображение и т. д.)

Эта функция отправки электронных писем позволяет вам создавать электронные письма в формате html, которые включают гиперссылки, изображения, различные размеры и цвета шрифтов и т. д.

После создание списка рассылки, который включает в себя поля электронной почты, которые вам нужны,

Когда вы настроить диалоговое окно отправки писем, вы можете сделать содержимое тела более насыщенным с помощью параметров на панели инструментов.

Смотрите скриншот ниже:


5.4 Простая вставка подписи Outlook по умолчанию при отправке электронных писем

В приведенном выше методе мы продемонстрировали код VBA, который поможет вам отправлять электронные письма с подписью Outlook по умолчанию. Здесь с функцией «Отправить электронные письма» вам просто нужно отметить параметр, после чего подпись Outlook по умолчанию будет вставлена ​​в электронные письма, отправленные вами из Excel.

После создание списка рассылки, который включает в себя поля электронной почты, которые вам нужны,

После появления настроить диалоговое окно отправки писем, вам нужно нажать Опции > Использовать настройки подписи Outlook.

Внимание: убедитесь, что перед параметром «Использовать настройки подписи Outlook» стоит галочка.

Когда получатели получают электронное письмо, они могут видеть подпись Outlook по умолчанию, отображаемую в конце тела электронного письма.


5.5 Легко отправлять электронные письма с указанной учетной записи электронной почты

Чтобы использовать определенную учетную запись электронной почты для отправки электронных писем из Excel вместо использования учетной записи по умолчанию, функция «Отправить электронные письма» также может помочь легко сделать это.

После создание списка рассылки, который включает в себя поля электронной почты, которые вам нужны,

После появления настроить диалоговое окно отправки писем, вам нужно нажать Опции > Отправлено из, затем щелкните учетную запись электронной почты, с которой нужно отправлять электронные письма.

Внимание: после выбора учетной записи электронной почты перед ней будет отображаться галочка.

Нажмите здесь чтобы узнать больше об этой функции отправки электронных писем.

  Если вы хотите получить бесплатную пробную версию (30-день) этой утилиты, пожалуйста, нажмите, чтобы загрузить это, а затем перейдите к применению операции в соответствии с указанными выше шагами.

В заключение, отправка электронных писем из Excel весьма полезна в нашей повседневной работе. В этой статье рассматриваются более подробные темы отправки электронных писем из Excel. Если есть другие темы или более простые решения, оставьте комментарий, чтобы сообщить мне об этом.


Лучшие инструменты для работы в офисе

Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%

  • Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
  • Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон
  • Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны
  • Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
  • Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
  • Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии
  • Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
  • Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF
  • Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.

вкладка kte 201905


Вкладка Office: интерфейс с вкладками в Office и упрощение работы

  • Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
  • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
  • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!

офисный дно

Бывает нужно разослать большое количество писем списку контактов из таблицы в Excel.

Это может быть список потенциальных клиентов с мероприятия, выгрузка контактов из программы (1С, Битрикс24, amoCRM), просто список родственников, которые с нетерпением ждут от вас поздравления с праздником или уникального предложения.

Расскажу, как сделать это просто, быстро и бесплатно. Для решения задачи понадобится Excel, Word и Outlook из пакета Microsoft Office.

Итак, например, есть Excel таблица с данными клиентов (ФИО, компания, E-mail) и мы хотим отправить им персонализированное сообщение о предстоящих скидках.

Таблица Excel
Таблица Excel со списком клиентов

Колонка “Пол” потребуется для определения окончания “уважаемый” или “уважаемая”, ее я вычислил по формуле, если “Отчество” заканчивается на “ч” значит это мужчина, если нет — женщина:

=ЕСЛИ(ПРАВСИМВ(C2;1) = "ч"; "М";"Ж")

В новом документе Word наберём шаблон текста сообщения, которое будем отправлять. Вместо обращения, имени и названия компании оставим пока пустые места.

Запустим Мастер Слияния: вкладка Рассылки (Mailings), Начать слияние (Start Mail Merge), далее Пошаговый мастер слияния (Step-by-Step Merge Wizard).

Пошаговый мастер слияния
Запуск пошагового мастера слияния

Откроется мастер, состоящий из 6 этапов.

На перовом этапе выберем пункт Электронное сообщение (E-mail), так как хотим отправить наши сообщения по электронной почте.

Выбор типа документа
Выбор типа документа

На втором этапе нужно указать, какой документ будет использоваться в качестве шаблона, выберем Текущий документ (Current document).

Выбор документа
Выбор документа

Третий этап — выбор получателей. Так как список наших клиентов хранится в файле Excel, выбираем пункт Использование списка, жмем Обзор (Browse) и указываем наш файл.

Выбор получателей
Выбор получателей

Откроется окно Получатели слияния, в нем можно выбрать или отменить клиентов для которых делаем рассылку.

Получатели слияния
Выбор получателей рассылки

Четвертый этап — создание сообщения. Тут можно вставить данные из нашего файла Excel в шаблон сообщения, который мы подготовили.

Создание сообщения
Создание сообщения

Вставим Фамилию, Имя, Отчество и название компании в наш шаблон, для этого: установим курсор в текст сообщения куда хотим вставить значение поля Excel, нажмем Другие элементы, в открывшемся окне выберем поле, которое хотим вставить, и так для всех полей.

Вставка поля слияния
Вставка поля

Чтобы правильно указать обращение “уважаемый” для мужчин, и “уважаемая” для женщин создадим правило. Жмём кнопку Правила (Rules) на вкладке Рассылки (Mailings) и выберем пункт IF…THEN…ELSE.

Создание правила
Создание правила

В открывшемся окне укажем правило: если поле “Пол” равно “М” — вставить текст “уважаемый”, в противном случае — вставить текст “уважаемая”.

Настройка правила
Настройка правила

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

Готовый шаблон слияния
Готовый шаблон слияния

На пятом этапе можно предварительно просмотреть результаты слияния. Для перехода между письмами служат кнопки со стрелками.

Просмотр сообщений
Предварительный просмотр сообщений

На завершающем 6 этапе нужно выбрать единственный пункт Электронная почта.

Завершение слияния
Завершение слияния

Затем в открывшемся окне указать тему отправляемых писем и выбрать в поле Кому столбец нашей таблицы Excel, в котором содержаться адреса получателей

Запуск рассылки
Запуск рассылки

После нажатия на кнопку ОК, Word автоматически подключится к вашему почтовому клиенту Outlook, поместит все сообщения в папку «Исходящие», после чего письма отправятся получателям.

Если вы хотите проверить письма перед отправкой, есть небольшая хитрость, нужно предварительно перевести Outlook в автономный режим Файл — Автономный режим. Письма останутся в исходящих, пока вы не выйдете из автономного режима и при необходимости вы сможете проверить или внести в них изменения.

На этом всё. Но вы можете поддержать проект. Даже небольшая сумма поможет нам писать больше полезных статей.

Если статья помогла или понравилась, пожалуйста поделитесь ей в соцсетях.

You can’t send emails directly form Excel, but there are a few ways to trigger the default mail client on your computer. In this guide, we’re going to show you how to send email in Excel.

Download Workbook

Send email with attachment

If you want to send the file you are working on, the simplest method is Excel’s Email command. This command opens a new email including the active file. You can add the command into your Quick Access Toolbar (QAT) by following the steps below.

  1. Click Customize Quick Access Toolbar button at the end of QAT commands.
  2. Click Email to insert the command into your QAT.
    How to send email in Excel 01 QAT
  3. The command will show up in the bar.
  4. Click the Email button to open a new mail. Make sure you have an email client installed, like Outlook.

Hyperlink Formula

Excel’s HYPERLINK formula is another way to send email from an Excel workbook. You can generate a link that can create a new mail with parameters like subject, cc, bcc or the body.

To trigger the email client, you need to add the «mailto:» prefix the email address you want to send.

=HYPERLINK(«mailto:my@email.com»)

Although you can’t automatically attach an Excel file, like you can with the Email command, you can generate the email content dynamically by cell references.

To add other parameters, add a question mark (?) after the email address(es). Each argument should be separated by an ampersand (&) character.

=HYPERLINK(«mailto:clientA@mail.com?cc=sales@mail.com&bcc=vice@mail.com&subject=New Proposal&body=Please review our new proposal in three days»)

Here is a cheat sheet:

cc Email address that will receive the mail’s carbon copy.
bcc Email that will receive the blind carbon copy of the mail.
; The delimiter for email addresses in the same argument.
subject The subject of the mail.
body The content of the mail.
? The first delimiter after recipient address.
& The delimiter for other parameters.

You can omit any argument you want to skip. Here is a sample formula with cell references:

=HYPERLINK(«mailto:»&C11&»?cc=»&C12&»&bcc=»&C13&»&subject=»&C14&»&body=»&C15)

Почтовая рассылка

Постановка задачи

Имеем таблицу в Microsoft Excel, в которой хранится информация о ключевых клиентах нашей компании (адреса эл.почты, имена, названия компаний и т.д.), которых мы хотим поздравить с очередным праздником.

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

В конце все созданные сообщения надо:

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

В терминах Microsoft Office такая процедура называется Слиянием (Mail Merge). Поехали…

Подготовка списка клиентов в Excel

mailmerge1.gif

Таблица со списком клиентов для рассылки должна удовлетворять нескольким простым условиям:

  • Шапка таблицы должна быть простой — одна строка с уникальными названиями столбцов (без повторений и пустых ячеек).
  • В таблице не должно быть объединенных ячеек.
  • В таблице не должно быть пустых строк или столбцов (отдельные пустые ячейки допускаются).

Если планируется отправка по электронной почте, то, само-собой, в таблице должен быть столбец с адресами получателей.

Поскольку Excel и Word не смогу сами определить пол клиента по имени, то имеет смысл сделать отдельный столбец с обращением (господин, госпожа и т.п.) или с родовым окончанием (-ый или -ая) для обращения «Уважаемый(ая)…» Как вариант, возможно полуавтоматическое определение пола в зависимости от окончания отчества («а» или «ч»), реализованное функцией ПРАВСИМВ (RIGHT).

В новых версиях Microsoft Excel 2007/2010 для таких таблиц очень удобно использовать инструмент Форматировать как таблицу (Format as Table) с вкладки Главная (Home). Подробнее про такие «умные таблицы» можно почитать тут.

Создаем сообщение в Word и подключаем Excel

Открываем новый пустой документ в Microsoft Word и набираем туда текст нашего сообщения, оставляя в нем пустые места для будущей вставки имени клиента и его компании.  

Потом запускаем пошаговый Мастер Слияния  на вкладке Рассылки (Mailings) кнопкой Начать слияние (Start Mail Merge) – Пошаговый мастер слияния (Step-by-Step Merge Wizard):

mailmerge3.gif

В Word 2003 и старше эта команда была доступна в меню Сервис — Письма и рассылки — Мастер слияния (Tools — Letters and Mailings — Mail Merge).

Далее следует процесс из 6 этапов (переключение между ними — с помощью кнопок Вперед (Next) и Назад (Back) в правом нижнем углу в области задач).

Этап 1. Выбор типа документа.

На этом шаге пользователь должен выбрать тип тех документов, которые он хочет получить на выходе после слияния. Наш вариант — Письма (Letters), если мы хотим на выходе отправить созданные письма на принтер или Электронное сообщение (E-mail), если хотим разослать их по почте.

mailmerge4.gif

Этап 2. Выбор документа

На этом шаге необходимо определить, какой документ будет являться основой (заготовкой) для всех будущих однотипных сообщений. Мы выбираем — Текущий документ (Current document).

mailmerge5.gif

Этап 3. Выбор получателей

На этом шаге мы подключаем список клиентов в Excel к документу Word. Выбираем Использование списка и жмем на Обзор (Browse), после чего в диалоговом окне открытия файла указываем где лежит наш файл со списком клиентов.

mailmerge6.gif

После выбора источника данных, Word позволяет провести фильтрацию, сортировку и ручной отбор записей при помощи окна Получатели слияния:

mailmerge7.gif

Этап 4. Создание письма

На этом этапе пользователь должен указать – куда именно в документ должны попасть данные из подключенного списка. Для этого необходимо установить курсор в точку вставки в письме и использовать ссылку Другие элементы — она выводит полный набор всех полей списка, из которого мы и выбираем нужное поле для вставки:

mailmerge10.gif

В итоге, после вставки всех полей слияния у нас должно получиться нечто похожее (вставленные поля выделены красным):

mailmerge12.gif

Если в исходной таблице не было специального столбца для окончания «ый»/»ая» к слову «уважаем» (как в нашем примере), но был обычный столбец «Пол» с классическими «муж» и «жен», то можно воспользоваться кнопкой Правила (Rules) на вкладке Рассылки (Mailings):

mail-merge-rules.png

Эта кнопка открывает список правил (функций и полей), доступных для вставки в документ при создании рассылки. Для подстановки нужного окончания к слову «уважаемый/ая» выберем третий пункт IF…THEN…ELSE. В открывшемся затем окне зададим правило подстановки правильного окончания в зависимости от пола:

mail-merge-if.png

Этап 5. Просмотр писем

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

mailmerge2.gif

Этап 6. Завершение слияния

На завершающем этапе возможны несколько вариантов:

mailmerge9.gif

Нажатие ссылки Печать (Print) приведет к немедленной отправке всех результатов слияния на принтер без вывода на экран.

Если необходимо сохранить созданные в результате слияния документы для дальнейшего использования или требуется внести ручную правку в некоторые из документов, то лучше использовать ссылку Изменить часть писем (Edit individual letters), которая выведет результаты слияния в отдельный файл:

mailmerge13.gif

Если вы на Шаге 1 выбирали опцию Электронные сообщения (E-mail), то на Шаге 6 вам предложат ввести тему для отправляемых сообщений и выбрать столбец таблицы, содержащий адреса электронной почты для рассылки. Затем все созданные сообщения будут помещены в папку Исходящие (Outbox) вашего почтового клиента Outlook.

Для проверки правильности созданных сообщений можно заранее временно отключить Outlook от сервера, чтобы письма сразу не ушли и вы могли их посмотреть и убедиться, что с ними все в порядке. Для этого в меню Microsoft Outlook можно выбрать команду Файл — Автономный режим или даже временно отключить сетевое подключение к вашему компьютеру. Письма временно «застрянут» в папке Исходящие (Outbox) и вы сможете их открыть и проверить перед отправкой.

Ссылки по теме

  • Отправка книги или листа Excel по электронной почте
  • Создание электронных писем с помощью функции ГИПЕРССЫЛКА (HYPERLINK)
  • Инструмент для массовой рассылки сообщений (в т.ч. с вложениями) по списку из надстройки PLEX

Like this post? Please share to your friends:
  • Письмо по информатике word
  • Письмо ответ в word
  • Письмо образец документ word
  • Письмо на возврат ошибочно перечисленных денежных средств образец скачать word
  • Письмо деду морозу в word