Обычно мы используем почтовые клиенты, такие как 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, , , , ,
с
Установить 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, , , , ,
с
Установить 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-дневная гарантия возврата денег.
Вкладка Office: интерфейс с вкладками в Office и упрощение работы
- Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
- Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
- Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!
В этой инструкции описаны настройки рассылки писем, общие для всех способов отправки (Outlook, TheBAT!, сервис рассылки).
К общим настройкам рассылки относится:
- настройка темы письма и текста письма
- настройка прикрепляемых файлов (вложений к письму)
- настройка получателей письма (основной получатель, копия, скрытая копия)
Для начала, открываем в Excel таблицу с исходными данными для рассылки.
В таблице может быть сколько угодно столбцов, но обязательно должен присутствовать столбец с адресами электронной почты
(если у вас нет такой таблицы, можете протестировать программу на примере этого файла Excel, скриншот которого приведён ниже)
Теперь открываем настройки программы, нажав кнопку Настройки на панели инструментов, и начинаем настраивать рассылку.
1. На вкладке Основные настройки ставим галочку «Выполнять рассылку писем»
При этом, на форме настроек появится новая вкладка с названием «Письма», где можно будет задать все параметры создаваемых писем:
2. Пролистываем форму настроек немного вниз, и задаём тему, текст и адрес email получателя писем:
Как видно на скриншоте, вы можете использовать поля из исходной таблицы как в качестве адреса получателя, так и в теме и тексте письма.
В поле «Получатель» необходимо сформировать корректный адрес электронной почты, на который будет отправлено письмо.
Адрес получателя можно ввести в полном и кратком формате:
- {email адресата} — обычный адрес электронной почты (краткий формат)
После подстановки значений из таблицы Excel, адрес будет иметь вид vasya@mail.ru - {Имя адресата} <{email адресата}> — полный формат адреса электронной почты (Имя Получателя <email>)
После подстановки значений из таблицы Excel, адрес будет иметь вид Василий Пупкин <vasya@mail.ru>
Вы можете использовать любой из этих 2 вариантов. Обычно используется второй вариант, т.к. люди лучше реагируют на письма, когда они адресованы лично им (а не просто на их адрес email)
Текст и тема письма могут быть произвольными.
В них тоже можно использовать коды полей (заголовки столбцов в фигурных скобках), а также любые другие поддерживаемые программой поля (например, код {%longdate%} для вставки текущей даты)
Вложения (прикрепление файлов к письму)
Если необходимо прикреплять файлы к создаваемым письмам, пролистываем настройки еще немного вниз, и видим галочки для включения 2 режимов добавления вложений:
Первая опция — «Прикреплять к письму сформированные файлы» — позволяет нам присоединять документы, заполненные (созданные) нашей программой.
К примеру, если в папке «Шаблоны» у нас находится несколько файлов — образцов документов, а прикрепить к письму необходимо только один файл, — то можно воспользоваться текстовым полем для указания маски файла.
(если в папке «Шаблоны» находятся файлы с именами Анкета.doc, Купон участника.doc и Расчёт скидки.xls, то при маске *купон* к письмам будут прикреплены только файлы, созданные на базе шаблона Купон участника.doc)
Вторая опция — «Прикреплять к письму все файлы из заданной папки» — даёт нам возможность добавлять во вложение к письму неизменяемые («статические») файлы.
Количество «статических» файлов неограничено — сколько их будет в папке, столько и будет прикреплено к каждому письму.
Внимание: Если вы случайно укажете в качестве этой папки каталог с огромным количеством файлов, то почтовая программа может зависнуть (при попытке прикрепить сотни мегабайтов во вложение к письму)
PS: В поиске файлов, просматривается только верхний уровень заданной папки, — файлы из подпапок не прикрепляются к письмам)
Когда мы всё настроили (и не забыли нажать кнопку «Сохранить изменения»), можно запускать формирование документов.
Результат создания писем — на скриншоте:
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.
- Click Customize Quick Access Toolbar button at the end of QAT commands.
- Click Email to insert the command into your QAT.
- The command will show up in the bar.
- 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)
Иногда бывает, что вам нужно отправить листы Excel по электронной почте, но для этого вам не нужно следовать традиционному способу отправки таблицы, прикрепив ее к электронной почте. Excel предоставляет инструмент, который позволяет отправить его одним щелчком мыши. В этом посте показано, как сделать опцию электронной почты очевидной в Excel 2010 и как ее использовать.
Примечание: Эта процедура требует, чтобы на вашем компьютере был установлен и настроен Outlook.
Запустите Microsoft Excel2010, перейдите в Файл меню, щелкните Опции и в левой панели щелкните Настроить ленту, на правой панели выберите Все команды из Выбрать команды раскрывающиеся варианты и ищите Электронная почта, электронная почта как вложение в формате PDF, а также Электронная почта как вложение XPS команды. Теперь на левой панели нажмите Новая вкладка, измените его имя на Outlook, а затем нажмите Новая группа чтобы создать группу во вновь созданной вкладке, дайте ей соответствующее имя. Теперь нажмите Добавить >> кнопку, чтобы добавить команды, связанные с электронной почтой, во вновь созданную группу. Нажмите Ok закрыть Excel Параметры диалог.
Теперь перейдите к вновь созданному Перспективы на вкладке вы увидите команды, добавленные ранее.
Теперь откройте таблицу, которую вы хотите прикрепить к электронному письму.
Если вы хотите прикрепить таблицу в формате Excel по умолчанию (.xlsx), нажмите Эл. адрес на Перспективы таб.
Откроется почтовое окно Outlook, вы можете увидеть прикрепленную таблицу Excel. Теперь вам просто нужно отправить его получателю.
Для отправки таблицы в виде PDF-копии щелкните Отправить по электронной почте как вложение в формате PDF на Перспективы таб. Откроется почтовое окно Outlook с вложенным файлом в формате PDF.
Дважды щелкнув прикрепленный файл, вы можете открыть таблицу в формате PDF, чтобы проверить расположение данных и т. Д.
Вы можете ознакомиться с ранее рассмотренными руководствами по столбцам данных Excel 2010 и функции СЧЁТЕСЛИ в Excel 2010.
Хитрости »
1 Май 2011 386294 просмотров
Прежде чем начать читать статью прошу принять к сведению объявление: используйте СВОИ АДРЕСА ЭЛ.ПОЧТЫ при тестировании кодов. Не надо отсылать письма на указанные в статье 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 544 скачиваний)
Ввиду все более участившихся вопросов о том, как добавить к тексту письма картинку именно через 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
ссылки
статистика