Sending emails with excel

In this post we’re going to learn how to send emails from Excel. It’s possible to do this using VBA, but that’s the old way from the 90’s and we’re in 2018.

We are going to explore Microsoft Flow. This is a new product from Microsoft that allows us to automate workflows between apps. It’s not just Microsoft Office apps that can be automated. There are a ton of third party connections available. We can easily create rules that automatically do things like:

  • Save any email attachments to a OneDrive folder.
  • Get a notification on your phone when someone updates a table in your spreadsheet.
  • Track all company Twitter mentions in a spreadsheet.
  • Sync your Outlook calendar to your Google calendar.
  • Forward emails to Slack.

The awesome part about Microsoft Flow is that it requires no code! We can design and build out your process (flow) in a couple minutes with an easy to use graphical interface.

In this post, we’ll be building a flow that schedules and sends an email template from Outlook based on the data in an Excel file.

Sign Up for Microsoft Flow

For this post, we’ll need to sign up for a Microsoft Flow account or sign into an existing Office 365 account.

There’s a free version which allows for 750 flows a month. If you have Office 365, then you already have Microsoft Flow and can use up to 2,000 flows per month.

Head to the Microsoft Flow website at https://flow.microsoft.com and click on either the Sign in or Sign up free button. Then either log in with your Office 365 credentials or provide the necessary information to create an account.

In the flow recipe we’ll be creating in this post, we’ll also need a OneDrive account. If you have Office 365, then you already have a OneDrive account. If not, then you can easily create a free one here https://onedrive.live.com.

A Quick Tour of Microsoft Flow

My Flows

In the My Flows tab of the site, we see all our flows listed that we have built. There’s a lot that can be done from this page.

  • There’s an icon that shows which connections have been used for the flow.
  • The name of the flow is listed.
  • We can deactivate a flow to temporality stop it from running.
  • We can share a flow with another user.
  • We can edit a flow.
  • We can create new flows either based on an existing template or starting from scratch with a blank flow.

Approvals

Flows allow us to create approval steps in our processes.

Imagine creating a flow to automatically email a quote generated from a spreadsheet to a potential client. You might want someone to review it and approve the email before it is actually sent. This is a step that can be added to any flow and is all managed from the Approvals tab.

Templates

A lot of what we may want to create might have already been built by the Microsoft team or someone else. In the Templates tab, there are a ton of pre-built flows that you can use as is, or customize for your use.

Click on any of the templates and see a more detailed explanation of what the flow does and what it needs to connect with to work.

Connectors

Connectors are the pieces you use to build out your automated process. In the Connectors tab, there are a ton of connections available for just about every popular online service including all the office applications.

There are many connections.

  • Office apps like Excel, Outlook, OneDrive etc…
  • Other Microsoft products like PowerApps and Power BI.
  • Google office productivity suite.
  • Twitter, Facebook, YouTube and other social apps.
  • Many other online tools.

We can click on any of the connections to see further details about what type of actions we can do with it.

Setting Up Our Excel File

The first thing we’re going to need to do is set up our Excel File in OneDrive. We can create a new Excel workbook in OneDrive and add data to it for use with our emails.

In this example, we’re going to be creating and sending emails from Outlook based on the data in Excel. For each row of data, we are going to be sending the client an email telling them the current account balance that is owed.

We don’t need to create the whole email in Excel, just the data for the parts that will be different for each email we want to send.

  • Date – We are going to delay sending out our emails based on this date.
  • Email Address – This is the email address we are going to send an email to.
  • Name – This is going to be used in body of the email to address the recipient by name.
  • Account Balance – This is going to be used in the body of the email to tell the recipient their current account balance.

We will need to add the data into an Excel Table, as this is the only Excel object that Microsoft Flow will recognize.

To create a table, we can select the data and go to the Insert tab and use the Table command. We can also use the Ctrl + T keyboard shortcut to create a table.

Once we have a table with our data, we need to make sure to give it a good name instead of the default Table1 name. With the table selected we can go to the Table Tools Design tab and give it a new name from the Properties section. We will name the table Emails.

This will make any flows created with the data a lot easier to understand later on. Proper column heading names will help later on too.

Creating Our First Blank Flow

When logged into Microsoft Flow, go to the My flows tab and click on the Create from Blank button. The next screen will show you some popular triggers to start your flow with, but we want a blank flow, so we can click on the Create from blank button again.

Adding Our Flow Trigger

The first thing we need to do when creating our flow is add a trigger. This is exactly what it sounds like, it’s something that will trigger the flow to execute.

In this case, we’re going to create a button that we can press from the Microsoft Flow app to run the flow.

  1. Search for button to narrow down the list of available triggers and find the mobile button.
  2. Select Flow button for mobile from the connection options.
  3. Choose the Triggers section of the results. Each connection might have several trigger and action options available.
  4. Click on the Flow button for mobile trigger.

Getting Data from Excel to the Flow

After we trigger our flow with the button, we’re going to want it to do something. These will be the actions we add in the next steps of our flow process.

The first action we want to do is get the data from our Excel table.

Click on the New step button to add the next step to the flow. Then select Add an action from the menu.

Search for Excel to narrow down the list of connections then select the Excel – Get rows action. This action will get all the rows of data from the specified table in a given workbook.

Now we can select the File name from our OneDrive using the file icon and then select the appropriate Table name from the drop down menu, our table was named Emails.

Creating a Delay Based on the Date Field in Excel

In this example, we want to send each email out at a particular date and time based on the Date field in the Excel data. We can add a schedule step into the flow to accomplish this.

Create a New step and Add an action. Then search for delay and choose the Schedule – Delay until action.

The delay step will require a timestamp input. We can hard code a single value here, but it’s also possible to Add dynamic content so the timestamp depends on the values in our Excel file. Note, that flow will interpret the timestamp data in Excel as being UTC.

Click into the timestamp input field and the dynamic content pop up will display.

Under the Get rows section of the dynamic content pop up, select the Date field from our Excel table.

When we add the date from our Get rows action, something sort of magical happens. Flow will automatically place the delay step inside an Apply to Each step. Flow realizes we don’t want to just perform our actions once, but we likely want to perform our actions for each row of data in the Excel table.

This is exactly what we want. We could have added this in ourselves before adding the delay step. But it’s nice to know it’ll tell us if we forget.

Create the Email Template for Each Row of Data

Now we are ready to add our email step after the delay. This will be added inside the Apply to Each step since we want to send an email for each row of the data in our table.

Press the Add an action button found inside the Apply to each step.

This time we can search for Outlook to narrow down the results and choose the Office 365 Outlook – Send an email action.

We can then create an email template, referencing fields from our data where appropriate. In the To input section we would add our Email Address field from our data since this contains the email address to which we want to send the email.

Add a Notification Step

Since this flow will delay the emails, we might want some sort of confirmation when each email is actually sent. For this, we could add a notification step. This will send us a notification when each email is sent.

Again, we want this step inside the Apply to each step, so press the Add an action button at the bottom of the Apply to each step. Search for notification to narrow down the results and choose the Notifications – Send me a mobile notification action.

We can then add Text to the alert to specify which email was sent.

To actually receive the notification on our mobile device, we will need to install the Microsoft Flow app. We can download either the Android app here or the Apple app here.

Saving and Naming the Flow

Now that we’ve finished building our flow process, we need to save it. Click on the Save icon in the upper right hand corner of the web app.

We’ll also want to give the new flow a descriptive name. Click on the default name found in the top left hand corner of the web app then rename it appropriately.

Running the Flow

Now that we’ve built our flow process, named and saved it, we are ready to use it. We can now run the flow a few different ways.

Since the trigger we created to run the flow was the mobile app button, we can run the flow from our mobile device with the app installed. Go to the Buttons section of the mobile app, then press the button for our email flow.

We can also run the flow from the web app in the My flows tab. Click on the 3 ellipse icon on the right side of the flow and choose Run now from the options.

Either method will start the flow.

If the date field is in the past, then those emails will be sent immediately. Future dates will have emails delayed. Even though future dated emails are not sent, they are still created by flow, so changing the data in the Excel table after running will not change future dated emails.

Conclusions

Microsoft Flow is simple to use and very powerful. We’re in the modern era and no longer need to be programmers to create useful automation’s that save tons of time.

We were able to easily create a flow that sends emails based on the data in a connected Excel table.

If you can use a mouse and have some ideas about processes you’d like to automate, then Microsoft Flow is meant for you.

I’d love to hear about all the cool things you build with Microsoft Flow, so let me know in the comments below!

About the Author

John MacDougall

John is a Microsoft MVP and qualified actuary with over 15 years of experience. He has worked in a variety of industries, including insurance, ad tech, and most recently Power Platform consulting. He is a keen problem solver and has a passion for using technology to make businesses more efficient.

VBA Code to Send Emails From Excel

In VBA, to send emails from Excel, we can automatically automate our mailing feature to send emails to multiple users at a time. However, to do so, we need to remember that we may do it by outlook, another product of outlook, so we need to enable outlook scripting in VBA. Once done, we use the .Application method to use outlook features.

VBA’s versatility is just amazing. VBA coders love Excel because by using VBA, we not only can work within Excel. Rather, we can also access other Microsoft tools. For example, we can access PowerPoint, Word, and Outlook by using VBAMicrosoft Outlook has a VBA reference that can be used to control Outlook. This makes it easy to automate repetitive activities in Outlook. To use VBA in Outlook, you’ll need to enable the developer feature, just like in Excel.read more. So I was impressed when I heard of sending emails from Excel. Yes, it is true. We can send emails from excel. This article will show you how to send emails from Excel with attachments using VBA CodingVBA code refers to a set of instructions written by the user in the Visual Basic Applications programming language on a Visual Basic Editor (VBE) to perform a specific task.read more.

Table of contents
  • VBA Code to Send Emails From Excel
    • Set Reference to Microsoft Office Library
    • 13 Easy Steps to Send Emails from Excel
      • Step #1
      • Step #2
      • Step #3
      • Step #4
      • Step #5
      • Step #6
      • Step #7
      • Step #8
      • Step #9
      • Step #10
      • Step #11
      • Step #12
      • Step #13
    • Recommended Articles

VBA Send Email from Excel

You are free to use this image on your website, templates, etc, Please provide us with an attribution linkArticle Link to be Hyperlinked
For eg:
Source: VBA Send Email from Excel (wallstreetmojo.com)

Set Reference to Microsoft Office Library

We need to send emails from Outlook. Since Outlook is an external objec, we first need object reference to “Microsoft Outlook 16.0 Object Library.”

  1. 1.     In VBA, Go to Tools > References.

    vba send email references1

  2. Now, we will see the object reference library. In this window, we need to set the reference to “Microsoft Outlook 16.0 Object Library.”

    vba send email references1

  3. After setting the object reference, click on “OK.”

Now, we can access Outlook objects in VBA coding.

13 Easy Steps to Send Emails from Excel

Writing the code to send an email with an attachment from Excel is quite complicated but worth spending some time.

You can download this VBA Send Email Excel Template here – VBA Send Email Excel Template

Follow the below steps to write your first email excel macroA macro in excel is a series of instructions in the form of code that helps automate manual tasks, thereby saving time. Excel executes those instructions in a step-by-step manner on the given data. For example, it can be used to automate repetitive tasks such as summation, cell formatting, information copying, etc. thereby rapidly replacing repetitious operations with a few clicks.
read more
.

Step #1

Start the sub procedure in VBASUB in VBA is a procedure which contains all the code which automatically gives the statement of end sub and the middle portion is used for coding. Sub statement can be both public and private and the name of the subprocedure is mandatory in VBA.read more.

Code:

Sub SendEmail_Example1()

End Sub

vba send email example 1.1

Step #2

Declare the variable Outlook.Application

Code:

Dim EmailApp As Outlook.Application 'To refer to outlook application

vba send email example 1.2

Step #3

The above variable is an object variable. Therefore, we need to create an instance of a new object separately. Below is the code to create a new instance of the external object.

Code:

Set EmailApp = New Outlook.Application 'To launch outlook application

vba send email example 1.3

Step #4

Now, to write the email, we declare one more variable as “Outlook.MailItem”.

Code:

Dim EmailItem As Outlook.MailItem 'To refer new outlook email

vba send email example 1.4

Step #5

To launch a new email, we need to set the reference to our previous variable as “CreateItem.”

Code:

Set EmailItem = EmailApp.CreateItem(olMailItem) 'To launch new outlook email

vba send email example 1.5

Now, the variable “EmailApp” will launch outlook. In the variable “EmailItem,” we can start writing the email.

Step #6

We need to be aware of our items while writing an email. First, we need to decide to whom we are sending the email. So for this, we need to access the “TO” property.

vba send email example 1.6

Step #7

Enter the email ID of the receiver in double quotes.

Code:

EmailItem.To = "[email protected]"

vba send email example 1.7

Step #8

After addressing the main receiver, if you would like to CC anyone in the email, we can use the “CC” property.

Code:

EmailItem.CC = "[email protected]"

vba send email example 1.8

Step #9

After the CC, we can set the BCC email ID as well.

Code:

EmailItem.BCC = "[email protected]"

vba send email example 1.9

Step #10

We need to include the subject of the email we are sending.

Code:

EmailItem.Subject = "Test Email From Excel VBA"

example 1.10

Step #11

We need to write the email body using HTML body type.

Code:

EmailItem.HTMLBody = "Hi," & vbNewLine & vbNewLine & "This is my first email from Excel" & _
                     vbNewLine & vbNewLine & _
                     "Regards," & vbNewLine & _
                     "VBA Coder" 'VbNewLine is the VBA Constant to insert a new line

example 1.11

Step #12

We are working on if we want to add an attachment to the current workbook. Then, we need to use the attachments property. First, declare a variable source as a string.

Code:

Dim Source As String

example 1.14

Then in this variable, write ThisWorkbook.FullName after Email body.

Code:

Source = ThisWorkbook.FullName

example 1.15

In this VBA Code, ThisWorkbook is used for the current workbook and .FullName is used to get the full name of the worksheet.

Then, write the following code to attach the file.

Code:

EmailItem.Attachments.Add Source

example 1.16

Step #13

Finally, we need to send the email to the mentioned email IDs. We can do this by using the “Send” method.

Code:

EmailItem.Send

example 1.17

We have completed the coding part.

Code:

Sub SendEmail_Example1()

Dim EmailApp As Outlook.Application
Dim Source As String
Set EmailApp = New Outlook.Application

Dim EmailItem As Outlook.MailItem
Set EmailItem = EmailApp.CreateItem(olMailItem)

EmailItem.To = "[email protected]"
EmailItem.CC = "[email protected]"
EmailItem.BCC = "[email protected]"
EmailItem.Subject = "Test Email From Excel VBA"
EmailItem.HTMLBody = "Hi," & vbNewLine & vbNewLine & "This is my first email from Excel" & _
vbNewLine & vbNewLine & _
"Regards," & vbNewLine & _
"VBA Coder"
Source = ThisWorkbook.FullName
EmailItem.Attachments.Add Source

EmailItem.Send

End Sub

Run the above code. It will send the email with the mentioned body with the current workbook as the attachment.

Recommended Articles

This article has been a guide to VBA Send Email from Excel. Here, we learn how to write VBA code to send emails from Excel with attachments along with an example and downloadable Excel template. You can learn more about VBA from the following articles: –

  • VBA TimeValue Function
  • Dictionary in VBA
  • Create Progress Bar in VBA
  • GetOpenFilename VBA

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

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

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

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


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

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

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

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


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

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

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

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

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

Синтаксис

HYPERLINK(link_location, [friendly_name])

аргументы

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

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

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


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

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

«почта:»&B2

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

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

=HYPERLINK(«mailto:»&B2)

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

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


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

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

«?cc=» & C2

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

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

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


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

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

«&тема=»& D2

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

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

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


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

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

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

«&тело=»& E2

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

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

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

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

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


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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

и

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

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

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

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

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

Заметки:

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

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


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

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


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

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

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

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

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

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

Ноты:

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

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

с

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

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

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

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

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

.Отображать

с

.Послать

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


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

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

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

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

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

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

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

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

Ноты:

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

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

с

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

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

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

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

.Отображать

с

.Послать

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

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


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

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

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

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


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

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

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

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

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

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

Заметки:

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

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

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

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

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

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

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

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


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

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

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

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

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

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

Ноты:

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

Ноты:

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

Ноты:

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

Ноты:

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

Заметки:

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

Заметки:

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    'Close TempWB
    TempWB.Close savechanges:=False

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

Заметки:

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

Private Sub CommandButton1_Click()
End Sub

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

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

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


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

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

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

Код VBA 1:

Dim OutlookMail As Outlook.MailItem

Код VBA 2:

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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


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

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

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

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

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

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


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

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

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

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

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

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

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

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


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

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

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

вкладка kte 201905


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

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

офисный дно

письмо excel

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

Данная статья описывает три способа отправки писем с помощью VBA в Excel. Вы можете скачать файл с примером отправки email с помощью VBA в Excel.

Отправить письмо в Excel с помощью VBA

Один из самых простых способов для автоматизации отправки почты с Excel заключается в вызове функции Create («ObjectOutlook.Application»). Данная функция возвращающает ссылку на ActiveX объект (в данном случает приложение Outlook), которое затем используется для создания и отправки электронной почты.

Чтобы проверить данный способ в работе, скопируйте и вставьте код ниже в VB редактор.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

Sub Send_Email_Using_VBA()
Dim Email_Subject, Email_Send_From, Email_Send_To, _
Email_Cc, Email_Bcc, Email_Body As String
Dim Mail_Object, Mail_Single As Variant
Email_Subject = «Попытка отправить письмо с помощью VBA»
Email_Send_From = «exceltipmail@gmail.com»
Email_Send_To = » exceltipmail@gmail.com «
Email_Cc = » exceltipmail@gmail.com «
Email_Bcc = » exceltipmail@gmail.com «
Email_Body = «Поздравляем!!!! Ваше письмо успешно отправлено !!!!»
On Error GoTo debugs
Set Mail_Object = CreateObject(«Outlook.Application»)
Set Mail_Single = Mail_Object.CreateItem(0)
With Mail_Single
.Subject = Email_Subject
.To = Email_Send_To
.cc = Email_Cc
.BCC = Email_Bcc
.Body = Email_Body
.send
End With
debugs:
If Err.Description &lt;&gt; «» Then MsgBox Err.Description
End Sub

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

предупреждение об отправке письма

К счастью, существует еще два способа, с помощью которых данный вопрос может быть решен: первый – через использование CDO, второй – имитирующий использование событий нажатий клавиш клавиатуры.

Отправить письмо в Excel с помощью CDO

Что такое CDO? CDO является библиотекой объектов, которая предоставляет интерфейс Messaging Application Programming Interface (MAPI). CDO позволяет манипулировать обменом данных, и отправлять и получать сообщения.

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

В нашем примере мы используем функцию CreateObject («CDO.Message»). Важно отметить, что необходимо правильно установить конфигурацию SMTP сервера, чтобы не допустить появления ошибок Run-time error 2147220973(80040213) или sendUsing configuration value is invalid. Пример ниже настроен на отправку сообщений через почту Google (Gmail). Для других почтовых серверов, вам потребуется ввести свои значения SMTP-сервера и SMTP-порта.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

Sub CDO_Mail_Small_Text_2()
Dim iMsg As Object
Dim iConf As Object
Dim strbody As String
Dim Flds As Variant
Set iMsg = CreateObject(«CDO.Message»)
Set iConf = CreateObject(«CDO.Configuration»)
iConf.Load -1
Set Flds = iConf.Fields
With Flds
.Item(«https://schemas.microsoft.com/cdo/configuration/smtpusessl») = True
.Item(«https://schemas.microsoft.com/cdo/configuration/smtpauthenticate») = 1
.Item(«https://schemas.microsoft.com/cdo/configuration/sendusername») = «Полный адрес вашего GMail ящика»
.Item(«https://schemas.microsoft.com/cdo/configuration/sendpassword») = «GMail пароль»
.Item(«https://schemas.microsoft.com/cdo/configuration/smtpserver») = «smtp.gmail.com»
.Item(«https://schemas.microsoft.com/cdo/configuration/sendusing») = 2
.Item(«https://schemas.microsoft.com/cdo/configuration/smtpserverport») = 465
.Update
End With
strbody = «Поздравляем!!!! Ваше письмо успешно отправлено !!!!»
With iMsg
Set .Configuration = iConf
.To = «Почтовый адрес получателя»
.CC = «»
.BCC = «»
.From = «»«ВашеИмя»» &lt;Reply@something.nl&gt;»
.Subject = «Попытка отправить письмо с помощью CDO»
.TextBody = strbody
.Send
End With
End Sub

Обратите внимание, чтобы воспользоваться данным методом вам необходимо подключить библиотеку CDO в редакторе макросов Tool –> References.

Отправить письмо с помощью CDO

Отправить письмо в Excel с помощью Send Keys

Другой способ отправки email с помощью Excel – использование команды ShellExecute, которая выполняет любую программу в VBA. Команда ShellExecute используется для загрузки документа с соответствующей программой. По сути, вы создаете объект String (текстовые данные) и передаете его в качестве параметра для функции ShellExecute. Остальная часть операций выполняется в окнах. Автоматически определяется, какая программа связана с данным типом документа и используется для загрузки документа. Вы можете использовать функцию ShellExecute, чтобы открыть Internet Explorer, Word, Paint и множество других приложений. В коде ниже используется задержка в три секунды, чтобы убедиться, что отправляемое письмо корректно и для возможности предотвратить отправку, если вы вдруг нашли какие-нибудь недочеты.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

Sub Send_Email_Using_Keys()
Dim Mail_Object As String
Dim Email_Subject, Email_Send_To, Email_Cc, Email_Bcc, Email_Body As String
Email_Subject = «Попытка отправить письмо с помощью SendKeys»
Email_Send_To = «exceltipmail@gmail.com «
Email_Cc = «exceltipmail@gmail.com «
Email_Bcc = «exceltipmail@gmail.com «
Email_Body = «Поздравляем!!!! Ваше письмо успешно отправлено !!!!»
Mail_Object = «mailto:» & Email_Send_To & «?subject=» & Email_Subject & «&body=» & Email_Body & «&cc=» & Email_Cc & «&bcc=» & Email_Bcc
On Error GoTo debugs
ShellExecute 0&, vbNullString, Mail_Object, vbNullString, vbNullString, vbNormalFocus
Application.Wait (Now + TimeValue(«0:00:03»))
Application.SendKeys «^({ENTER})»
Application.SendKeys («{ENTER}»)
debugs:
If Err.Description <> «» Then MsgBox Err.Description
End Sub

Cкачать файл с примером отправки email с помощью VBA в Excel

The Wonder of the HYPERLINK Function

The HYPERLINK function in Excel allows us to use cell references to create an email.  The referenced cells can contain other functions, like IF and XLOOKUP, which allows us to create incredibly dynamic messages.

In our sample below, we have a list of sales representatives, their email addresses, current sales, and their sales goals.

We will create a dynamic HYPERLINK that will send either a motivational email if they missed their goal, or a congratulatory email if they achieved their goal.

By clicking the dynamic hyperlink, we generate one of these two email messages.  Each message contains the following:

  • Sales representative’s email address in the TO: field
  • Custom subject line
  • Custom messaging in the body text area

Creating the Supporting Formulas

To achieve this behavior, we need to create some “helper columns” that will contribute to the construction of the final hyperlink.

The first “helper column” called Exceeded Goal (starting in cell E2) will use an IF function to determine if the sales representative met their sales goal.

=IF(C2 >= D2, C2 – D2, “”)

If the representative’s sales are greater than or equal to their goal, we calculate the difference (overage).  If not, we display nothing in the cell (two sets of double-quotes).

NOTE: For more information on the IF function, check out this post.

The second “helper column” called Subject (starting in cell F2) will also use an IF function to determine which subject to place in the Subject field of the email.

=IF(E2 = "", "", "Thank You " & TRIM(LEFT(A2, SEARCH(" ", A2))))

This formula uses some of Excel’s text manipulation functions, such as LEFTTRIM, and SEARCH, to extract the representative’s first name from column A and concatenate it with pre-defined text.

NOTE: An alternate version of the formula using only the LEFT and SEARCH functions is as follows:

=IF(E2 = "", "", "Thank You " & LEFT(A2, SEARCH(" ", A2) - 1))

The third “helper column” called Body (starting in cell G2) will use an IF function to create the custom message that will be placed in the Body field of the email.

=IF(E2 = "", "", "You achieved your goal of " & D2 & " .%0A You even exceeded your goal by " & E2 & "!")

No; that’s not a typo.  The .%0A will be discussed later in this post.

The final “helper column” called Send Email (starting in cell H2) will use the IF and HYPERLINK functions to generate the clickable link.

=IF(E2 = "", HYPERLINK("mailto:" & B2 & " ?subject=Let's do this & body = Try harder next month!", "Send Motivation"), HYPERLINK("mailto:" & B2 & "?subject=" & F2 & " & body=" & G2, "Send Email"))

The HYPERLINK Function

The HYPERLINK function has the following structure:

HYPERLINK(link_location, [friendly_name])

  • Link_location – required. This can be a path and file name to a document to be opened, a universal naming convention (UNC) path on a server, or a Uniform Resource Locator (URL) path on the Internet or an intranet.
  • Friendly_name – optional. The jump text or value that is displayed in the cell.  The Friendly_name is displayed in an underlined, blue font.  If not defined, the cell displays the link_location as the jump text.

The Problem with the HYPERLINK Function

The HYPERLINK function requires special syntax when creating an email hyperlink, and Excel is not exactly generous in the Help Department when creating this form of hyperlink.

Let’s start with a smaller example.

We have a list of email addresses and we want to create dynamic hyperlinks.

If we performed this in a traditional way, we could right-click on a cell and select Link.

In the Insert Hyperlink dialog box, we select the E-Mail Address option from the “Link to:” column on the left.  From here, we can type the email address in the “E-mail address:” field.

The downside of this method is that we can’t place cell references in the “E-mail address:” field.

If we enter a valid email address, notice how Excel automatically adds the special syntax mailto: to the email address.

If we add text to the “Subject:” field, Excel will again insert special syntax in the form of ?subject= to our text.

It is the above special syntax that we need to manually create in our formula.

The Question Mark is a character that defines the beginning of the additional attributes of the email.

Each additional attribute will need to be prefaced with an ampersand “&” symbol.

If we have hundreds of email addresses, it will take a lot of time to create each hyperlink individually.

Or, we could write the following formula:

=HYPERLINK("mailto:" & B5 & "?subject=" & $B$1 & "&cc=" & $B$2 & "&body="&$B$3, "Send email")

Breaking Down Our HYPERLINK Formula

Let’s break the formulas into smaller, more manageable pieces.

=HYPERLINK("mailto:" & B5 & "?subject=" & $B$1 & "&cc=" & $B$2 & "&body="&$B$3, "Send email")

Because we are inserting text in our HYPERLINK function, we need to place the pieces within double-quotes.

We start with the “mailto:” special syntax.

"mailto:"

We add to that the cell reference for the cell holding the email address.  In this case, cell B5.

"mailto:" & B5

If we weren’t adding any custom subject lines or body text, we can move directly to the Friendly_name argument.  We want the cell to display the message “Send email”.

"mailto:" & B5, "Send email"

The final version of the formula appears as follows:

=HYPERLINK("mailto:" & B5, "Send email")

Testing the Link

When we click on the hyperlink, we are presented with the following message window.

We see the email address has been placed in the To field.

Adding a Subject Line

We can either type the subject line directly into the HYPERLINK formula, or we can make the subject line dynamic.

We’ll place some text in cell B1 that says, “Welcome to the team”.

Here’s where it gets a bit tricky.

We need to use an “&” to concatenate the B1 cell reference to the existing “mailto”: & B5 argument.

Because we are trying to add text for the subject field, we must precede the additional argument with special syntax.

"?Subject="

The question mark is the beginning of additional arguments which need to be place in double-quotes.

Next, we concatenate (&) a cell reference (B1) to our subject line.

"?Subject=" & B1

The updated formula appears as follows:

=HYPERLINK("mailto:" & B5 & "?Subject=" & B1, "Send email")

If you plan to repeat the formula to adjacent rows or columns, you will need to lock the B1 reference, so it does not change during a Fill Series operation.

=HYPERLINK("mailto:" & B5 & "?Subject=" & $B$1, "Send email")

Testing the Link

When we click on the hyperlink, we are presented with the following message window.

We see the email address has been placed in the To field and the subject line has been filled with the text from cell B1.

Adding CC Recipient(s)

If we always want our boss to the Cc’d on all emails, we can add a reference to cell B2 that contains the email address of our boss.

To update the HYPERLINK formula, we will add the following to our Link_location argument:

& "&cc=" & $B$2

NOTE: Because we are concatenating additional special syntax, we need an “&” symbol within the double-quotes.  This will attach the CC instruction to the Subject instruction.

The updated formula appears as follows:

=HYPERLINK("mailto:" & B5 & "?Subject=" & $B$1 & "&cc=" & $B$2, "Send email")

You can visualize the completed Link_location argument as follows:

"mailto:kim@hello.com ? subject=Welcome to the team & cc=boss@hello.com"

Testing the Link

When we click on the hyperlink, we are presented with the following message window.

We see the email address has been placed in the To field, the subject line has been filled with the text from cell B1 and the Cc field has been populated with the boss’ email address from cell B2.

Add Body Text

If we always want to include a message in the Body portion of all emails, we can add a reference to cell B3 that contains the message that will appear in the body of the email.

To update the HYPERLINK formula, we will add the following to our Link_location argument:

& "&body=" & $B$3

The updated formula appears as follows:

=HYPERLINK("mailto:" & B5 & "?Subject=" & $B$1 & "&cc=" & $B$2 & "&body=" & $B$3, "Send email")

We can visualize the completed Link_location argument as follows:

"mailto:kim@hello.com ? subject=Welcome to the team & cc=boss@hello.com & body=It’s great..."

Testing the Link

When we click on the hyperlink, we are presented with the following message window.

We see the updated email with the message from cell B3 in the Body portion of the email.

Adding Line Breaks in the Body Text

Because in-cell carriage returns (ALT-Enter) in an Excel cell are not recognized by Outlook, we must use a special character sequence to tell Outlook to implement a carriage return.  The carriage return character code is ”percentage-zero-A”.

%0A

We need to update the text in our body text reference cell to appear as follows:

Before:

It's great to have you on our team.  We hope you have a wonderful start.

After:

It's great to have you on our team.  %0AWe hope you have a wonderful start.

Testing the Link

When we click on the hyperlink, we are presented with the following message window.

We see the text from cell B3 in the Body portion of the email with a carriage return to break the text into multiple lines.

Time for Mass Production

If we fill the formula down the column, we can click on any of the new HYPERLINK formulas and produce a custom message for our selected user.

By using more creative formulas (see above: Creating the Supporting Formulas) to alter the subject lines and body text, we can create very dynamic emails based on a variety of scenarios.

Word of Warning

An issue to be aware of is the formula character limit of 255 characters.

This means you can’t write a very long email or include too many recipients. One way to optimize the formula is to keep the [friendly name] as short as possible.

Practice Workbook

Feel free to Download the Workbook HERE.

Excel Download Practice file

Published on: October 31, 2019

Last modified: February 17, 2023

Microsoft Most Valuable Professional

Leila Gharani

I’m a 5x Microsoft MVP with over 15 years of experience implementing and professionals on Management Information Systems of different sizes and nature.

My background is Masters in Economics, Economist, Consultant, Oracle HFM Accounting Systems Expert, SAP BW Project Manager. My passion is teaching, experimenting and sharing. I am also addicted to learning and enjoy taking online courses on a variety of topics.

Like this post? Please share to your friends:
  • Sentence for the word matter
  • Sending emails from word
  • Semtools для excel 2007
  • Sentence for the word keen
  • Sending email in excel vba