ad

Excel 教程 – 从 Excel 发送电子邮件-英雄云拓展知识分享

匿名投稿 2118 2024-02-04

Excel 教程 – 从 Excel 发送电子邮件

通常,我们使用 Outlook、Gmail 等电子邮件客户端来发送电子邮件。 但是,许多人将数据存储在 Excel 工作簿中,并且在使用这些数据时需要将一些数据发送给其他人。 因此,这种情况下,他们需要直接从 Excel 工作簿发送电子邮件,这样可以节省操作电子邮件客户真个时间。 本分步教程将向您展现如何在不同条件下从 Excel 发送电子邮件。

备注:在利用以下方法之前,您需要在您的计算机中配置一个 Outlook 电子邮件客户端,并将其设置为您的默许电子邮件客户端。

目录: [ 隐藏 ]

(单击下面目录中的任何标题或在右边导航到相应的章节。)
1. 从 Excel 发送电子邮件的基础知识
1.1 使用 Excel 内置功能从 Excel 发送电子邮件
1.1.1 从 Excel 发送带有公式的电子邮件

1.1.1.1 将电子邮件地址添加到超链接公式
1.1.1.2 将抄送收件人添加到超链接公式
1.1.1.3 为超链接公式添加主题行
1.1.1.4 在超链接公式中添加带换行符的正文
1.1.1.5 指定要为超链接显示的文本

1.1.2 使用超链接功能从 Excel 发送电子邮件

Excel 教程 – 从 Excel 发送电子邮件-英雄云拓展知识分享

1.2 使用 VBA 脚本向单元格中的多个收件人发送电子邮件
1.2.1 使用 VBA 脚本向单元格中的多个收件人发送电子邮件
1.2.2 使用 VBA 脚本分别向单元格中列出的每一个收件人发送电子邮件

2. 在从 Excel 发送的电子邮件中插入附件或 Outlook 签名(使用 VBA 脚本)
2.1 在从 Excel 发送的电子邮件中插入附件
2.1.1 将某个文件作为附件发送电子邮件
2.1.2 经过电子邮件将当前工作表作为附件发送
2.1.3 经过电子邮件将当前工作簿作为附件发送
2.1.4 将全部工作簿作为 PDF 附件经过电子邮件发送
2.1.5 经过电子邮件将当前工作表作为 PDF 附件发送

2.2 在从 Excel 发送的电子邮件中插入 Outlook 签名

3. 满足条件时自动从 Excel 发送电子邮件(使用 VBA 脚本)
3.1 当单元格到达一定值时自动发送电子邮件
3.2 单元格值更改时自动发送电子邮件
3.3 保存工作簿时自动发送电子邮件
3.4 在特定时间自动发送电子邮件

4. 附加主题
4.1 从 Excel 中经过电子邮件发送一系列单元格(使用 VBA 脚本)
4.1.1 经过电子邮件将范围作为 Excel 的附件
4.1.2 经过电子邮件将范围作为 Excel 正文的一部份

4.2 在 Excel 中单击按钮时发送电子邮件(使用 VBA 脚本)
4.3 从指定的电子邮件帐户发送电子邮件
4.4 到达日期时发送电子邮件

5. 一个方便的工具,可帮助您轻松地从 Excel 发送电子邮件
5.1 轻松创建包括您需要的电子邮件字段的邮件列表
5.2 轻松发送电子邮件,包括您在邮件列表中创建的字段
5.3 轻松发送带有 HTML 正文的电子邮件(包括超链接、图片等)
5.4 发送邮件时轻松插入 Outlook 默许签名
5.5 从指定的电子邮件帐户轻松发送电子邮件


1. 从 Excel 发送电子邮件的基础知识

本节介绍从 Excel 发送电子邮件的基础知识。

1.1 使用 Excel 内置功能从 Excel 发送电子邮件

如果您只想从 Excel 发送简单的电子邮件,仅包括收件人、主题、抄送和正文字段。 Excel 中的内置函数可以提供帮助。


1.1.1 从 Excel 发送带有公式的电子邮件

以下表所示,要针对给定字段从 Excel 发送不同的电子邮件,您可使用给定字段的单元格援用创建不同的超链接公式来完成它。 创建电子邮件超链接后,您可以单击需要自动发送电子邮件的超链接。

注意: 如果收件人或抄送字段中有多个收件人,请用分号分隔。

本节分为4个部份,向您展现将电子邮件地址、抄送收件人、主题行和正文分别添加到超链接公式的步骤。 请履行以下操作。

的语法和参数 超级链接 功能以下。

句法

HYPERLINK(link_location, [friendly_name])

参数

链接位置 (必填):要打开的文档的路径和文件名;
提示:在本教程中,我们需要的所有电子邮件字段,例如收件人的电子邮件地址、抄送收件人、主题行和正文,都应当放在第一个参数“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 为超链接公式添加主题行

要将主题行添加到超链接功能,请添加 "&主题=" 作为公式的一部份,以下所示。

"&subject="& D2
其中 C2 包括电子邮件主题。

单元格 F2 中的公式现在应以下所示:

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


1.1.1.4 在超链接公式中添加带换行符的正文

最后一步是将正文添加到超链接公式中。 如您在示例中所见,E2 中的两行文本由换行符分隔,并且您希望在电子邮件正文中保存换行符。 Outlook 在这类情况下是不是辨认换行符? 让我们检查一下。

要将正文文本添加到超链接公式中,您需要添加 “&身体=” 作为公式的一部份,以下所示。

"&body="&E2
其中 E2 包括电子邮件的正文。

单元格 F2 中的公式现在显示以下:

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

注意: 如果按 Enter 键并单击链接。 您可以在新电子邮件中看到电子邮件正文中的内容显示在同一行中。

要在单独的行中显示电子邮件正文,您需要经过添加回车字符代码来修改单元格内容 %0A 到需要插入换行符的文本。 看截图:


1.1.1.5 指定要为超链接显示的文本

在上述步骤中,我们使用电子邮件字段完成了 Link_location 参数。 在本节中,我们将完成下一个参数 [friendly_name]。

在这类情况下,我希望超链接单元格将文本显示为“给xx发邮件”,其中 xx 是 A2 中的收件人姓名。 因此,这种情况下,F2中的公式应改成:

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

Enter 取得结果的关键。

选择此公式单元格并拖动其 自动填充句柄 向下创建其他电子邮件超链接。 看截图:


1.1.2 使用超链接功能从 Excel 发送电子邮件

除使用上述超链接公式,您可以手动创建电子邮件超链接 插入 超链接 Excel 中的函数。 本节将向您展现这些步骤。

1. 右键单击要插入超链接的电子邮件,选择 Link 从右键单击菜单中。

2.在弹出 插入超链接 对话框,您需要配置以下。

2.1)选择 电子邮件地址 在左边窗格中。
2.2)在 显示文字 文本框,输入要在单元格中显示的文本;
保养诀窍:您不能在此对话框中使用单元格援用,因此您应当手动输入电子邮件字段,以下所示。
2.3)在 E-mail地址 文本框,您需要输入以下电子邮件地址。
mailto:电子邮件地址
请替换文字“电子邮件地址” 使用您的真实电子邮件地址。 如果您有多个电子邮件地址,请用分号分隔它们。
2.4)在 主题 文本框,您可以在此处指定您的电子邮件主题和电子邮件正文。 请进行以下配置:
电子邮件主题&正文=电子邮件正文
在这类情况下,我输入 每个月销售&body=Hi,%0AEmail 已收到.
> 主题是月度销售;
> 电子邮件正文是:
嗨,
收到电子邮件。 (%0A 是Outlook可以辨认的回车字符代码)
2.5)点击 OK 按钮保存超链接。 看截图:

单击超链接时,将创建一封带有指定收件人、主题和正文字段的 Outlook 电子邮件,以下面的屏幕截图所示。

笔记:

1) 使用这类方法,您必须手动创建每一个电子邮件超链接。
2)您不能使用此方法将抄送字段添加到电子邮件中。 因此,这种情况下,如果您需要抄送字段,请重新打开的电子邮件窗口中添加。


1.2 使用 VBA 脚本向单元格中的多个收件人发送电子邮件

在上面的示例中,您可以看到多个电子邮件地址显示在一个单元格中,以分号分隔。 如果您有以下屏幕截图所示的电子邮件地址列表,并且想要向所有这些人发送电子邮件或独立电子邮件,则以下 VBA 代码可以帮到您。


1.2.1 使用 VBA 脚本向单元格中的多个收件人发送电子邮件

1. 在包括您要将电子邮件发送到的所有电子邮件地址的工作表中。 请按 其他 + F11 键打开 Microsoft Visual Basic for Applications 窗口。

2。 在里面 Microsoft Visual Basic for Applications 窗口中,单击 插入 > 模块 然后将以下代码粘贴到 模块(代码) 窗口。

VBA 代码:向电子邮件地址列表发送电子邮件

Sub sendmultiple()

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:", "tools 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 运行代码的键和 Excel的tools 对话框弹出。 选择电子邮件地址列表并单击 OK.

笔记:

1)如果不想弹出上述对话框,想直接在代码中指定邮箱地址范围,请替换此行:
Set xRg = Application.InputBox("请选择地址列表:", "tools for Excel", xTxt, , , , , 8)
with
设置 xRg = Range("A2:A7")
2) 您可以在以下几行中指定您自己的电子邮件主题和正文:
.Subject = "测试"
.Body = "Dear " _

& vbNewLine & vbNewLine & _

"This is a test email " & _

"sending in Excel"

3) 要直接发送邮件而不打开以下新消息窗口,您需要替换此行:
。显示
with
。发送

运行代码后,所选范围内的所有电子邮件地址都会显示在消息窗口的“收件人”字段中。 看截图:


1.2.2 使用 VBA 脚本分别向单元格中列出的每一个收件人发送电子邮件

上面的代码将所选范围内的所有电子邮件地址添加到消息窗口的“收件人”字段中。 如果您想将电子邮件分别发送到单元格中列出的每一个电子邮件地址而不让他们看到彼此的电子邮件地址,您可以尝试以下 VBA 脚本。

1. 在包括您要将电子邮件发送到的所有电子邮件地址的工作表中。 请按 其他 + F11 钥匙 打开 Microsoft Visual Basic for Applications 窗口.

2。 在里面 Microsoft Visual Basic for Applications 窗口中,单击 插入 > 模块,然后将以下代码粘贴到模块(代码)窗口中。

VBA 代码:分别向单元格中列出的每一个电子邮件地址发送电子邮件

Sub SendEmailToAddressInCells()

' 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", "tools 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。 然后点击 工具 > 援用。参考– VBAProject 对话框,找到并检查 Microsoft Outlook 16.0 对像库 框,然后单击 OK 按钮保存更改。

4。 按 F5 运行代码的键和 Excel的tools 对话框弹出。 选择电子邮件地址列表并单击 肯定。

笔记:

1)如果不想弹出上述对话框,想直接在代码中指定邮箱地址范围,请替换此行:
Set xRg = Application.InputBox("请选择地址列表:", "tools for Excel", xTxt, , , , , 8)
with
设置 xRg = Range("A2:A7")
2) 您可以在以下几行中指定您自己的电子邮件主题和正文:
.Subject = "Test"

.Body = "Dear " _

& vbNewLine & vbNewLine & _

"This is a test email " & _

"sending in Excel"

3)不打开以下消息窗口直接发送电子邮件,您需要替换此行:
。显示
with
。发送

在此示例中,所选范围内有6个电子邮件地址,因此将自动创建6个 Outlook 消息窗口,并在“收件人”字段中列出单独的电子邮件地址,以下面的屏幕截图所示。

5.最后,单击 送出 按钮逐一发送电子邮件。


2. 在从 Excel 发送的电子邮件中插入附件或 Outlook 签名(使用 VBA 脚本)

本节将向您展现如何在从 Excel 发送的电子邮件中插入附件或 Outlook 默许签名。

2.1 在从 Excel 发送的电子邮件中插入附件

这里我们描写插入附件的不同情况,您可以针对自己的需要选择方法。 在本节中,您可以学习(单击以下任何链接以导航到相应的方法):

经过电子邮件将某个文件作为附件发送
经过电子邮件将当前工作表作为附件发送
经过电子邮件将当前工作簿作为附件发送
将全部工作簿作为 PDF 附件经过电子邮件发送
将当前工作表作为 PDF 附件经过电子邮件发送

2.1.1 将某个文件作为附件发送电子邮件

您可以利用以下 VBA 代码将文件夹中的一个或多个文件作为 Excel 的附件发送给电子邮件。

1。 按 其他 + F11 键。

2.在开幕 Microsoft Visual Basic for Applications 窗口中,单击 插入 > 模块. 然后将以下 VBA 代码粘贴到模块(代码)窗口中。

VBA 代码:将文件夹中的文件作为 Excel 的附件经过电子邮件发送

Sub EmailWithAttachments()

' 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 = ⑴ Then

With xMailOut

.BodyFormat = olFormatRichText

.To = ""

.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) 排队 .到= ,请更换 使用您自己的收件人的电子邮件地址;
2)在行中分别更改电子邮件主题和电子邮件正文 .Subject =“测试”.HTMLBody =“测试”;
3) 您可以针对需要添加抄送和密送收件人。 只需在该行下方添加以下两行。至 = .
.CC = "电子邮件地址"
.BCC = "电子邮件地址"

3。 然后点击 工具 > 援用。参考– VBAProject 对话框,找到并检查 Microsoft Outlook 16.0 对像库 框,然后单击 OK 按钮保存更改。

4。 按 F5 键来运行代码,然后 阅读 弹出窗口,请在邮件当选择您需要附加的文件,然后点击 OK.

然后会弹出一个消息窗口。 您可以在 Attached 字段中看到所选文件显示为附件。


2.1.2 经过电子邮件将当前工作表作为附件发送

如果您想将当前工作表作为附件从 Excel 中经过电子邮件发送,您可以在本节中利用 VBA 脚本。

1。 按 其他 + F11 键。

2.在开幕 Microsoft Visual Basic for Applications 窗口中,单击 > 模块. 然后将以下 VBA 代码粘贴到 模块(代码) 窗口。

VBA 代码:经过电子邮件将当前工作表作为附件发送

Sub SendWorkSheet()

'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 = ""

.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) 在行中。至 = ,请更换 与真实收件人的电子邮件地址。 如果您需要多个电子邮件地址,请用分号分隔。
2)在行中分别更改电子邮件主题和电子邮件正文 .Subject =“ KTE功能”.Body = "请检查并浏览此文档。";
3)在以下两行中:
.CC = "电子邮件地址"
.BCC = "电子邮件地址"
如果要添加 cc 和 bcc 收件人,请替换文本“电子邮件地址”在您需要的电子邮件地址的行中。
如果您不需要 cc 和 bcc 收件人,只需添加撇号 ' 每行之前。

3。 按 F5 键运行代码,则当前工作表将保存为 Excel 工作簿并作为附件自动插入到消息窗口中。 看截图:

注意: 仅包括当前工作表的附加工作簿与原始工作簿具有相同的名称。 并且您运行代码的时间也会添加到工作簿名称中。


2.1.3 经过电子邮件将当前工作簿作为附件发送

在学习了经过 Excel 将当前工作表作为附件发送电子邮件的 VBA 代码以后,我们在此提供另外一个 VBA 脚本来帮助您将全部工作簿作为附件发送电子邮件。 请履行以下操作。

1。 按 其他 + F11 键。

2.在开幕 Microsoft Visual Basic for Applications 窗口中,单击 插入 > 模块。 然后将以下 VBA 代码粘贴到模块(代码)窗口中。

VBA 代码:经过电子邮件将当前工作簿作为 Excel 的附件发送

Sub SendWorkBook()

'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 = ""

.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) 排队 .到= ,请更换 与真实收件人的电子邮件地址。 如果您需要多个电子邮件地址,请用分号分隔。
2)在行中分别更改电子邮件主题和电子邮件正文 .Subject =“ KTE功能”.Body = "请检查并浏览此文档。";
3)在以下两行中:
.CC = "电子邮件地址"
.BCC = "电子邮件地址"
如果要添加 cc 和 bcc 收件人,请替换文本“电子邮件地址”在您需要的电子邮件地址的行中。
如果您不需要 cc 和 bcc 收件人,只需添加撇号 ' 每行之前。

3。 按 F5 键运行代码,然后当前工作簿会自动作为附件插入到消息窗口中。 看截图:


2.1.4 将全部工作簿作为 PDF 附件经过电子邮件发送

对大多数人来讲,他们偏向于将 Excel 工作簿保存为 PDF 文件,然后将其作为附件发送给其他人。 在本节中,我将向您展现一种直接从 Excel 发送电子邮件的方法,其中当前打开的工作簿作为 PDF 附件,而无需手动将工作簿另存为 PDF 文件。

1。 按 其他 + F11 键。

2.在开幕 Microsoft Visual Basic for Applications 窗口中,单击 插入 > 模块。 然后将以下 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, ".", ⑴, 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 = ""

.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) 排队 .到= ,请更换 与真实收件人的电子邮件地址。 如果您需要多个电子邮件地址,请用分号分隔。
2)在行中分别更改电子邮件主题和电子邮件正文 .Subject =“测试”.Body = "测试";
3)在以下两行中:
.CC = "电子邮件地址"
.BCC = "电子邮件地址"
如果要添加 cc 和 bcc 收件人,请替换文本“电子邮件”在您需要的电子邮件地址的行中。
如果您不需要 cc 和 bcc 收件人,只需添加撇号 ' 每行之前。
4) PDF 文件的名称将与原始工作簿的名称相同。 您运行代码的时间也将添加到工作簿名称中。 如果不需要给文件名加上时间戳,请去掉 & 格式(现在,“dd-mmm-yy h-mm-ss”) 从下一行。
FileName = Left(Wb.Name, (InStrRev(Wb.Name, ".", ⑴, vbTextCompare) - 1)) & Format(Now, "dd-mmm-yy h-mm-ss") & ".pdf "

3。 按 F5 运行代码的关键。 然后,当前工作簿会自动作为 PDF 文件附件插入到新消息窗口中。 看截图:


2.1.5 经过电子邮件将当前工作表作为 PDF 附件发送

举例来看,有一个名为“Monthly sales”的工作簿,您在名为“sales report”的工作表中完成了一个销售报告表,并希望将此工作表作为 PDF 文件发送给您的同事。 下面的 VBA 代码可以帮你一个忙。

1。 按 其他 + F11 键。

2.在开幕 Microsoft Visual Basic for Applications 窗口中,单击 > 模块。 然后将以下 VBA 代码粘贴到模块(代码)窗口中。

VBA 代码:将当前工作表作为 PDF 附件经过电子邮件发送

Sub SendWorkSheetToPDF()

'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 = ""

.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) 排队 .到= ,请更换 与真实收件人的电子邮件地址。 如果您需要多个电子邮件地址,请用分号分隔。
2)在行中分别更改电子邮件主题和电子邮件正文 .Subject =“测试”.Body = "测试";
3)在以下两行中:
.CC = "电子邮件地址"
.BCC = "电子邮件地址"
如果要添加 cc 和 bcc 收件人,请替换文本“电子邮件”在您需要的电子邮件地址的行中。
如果您不需要 cc 和 bcc 收件人,只需添加撇号 ' 每行之前。
4) PDF 文件的名称为: 原始工作簿的名称_原始工作表的名称. 在这类情况下,PDF 的名称将是 Monthly sales_sales 报告。

3。 按 F5 运行代码的关键。 然后,当前工作表会自动作为 PDF 文件附件插入到新消息窗口中。 看截图:


2.2 在从 Excel 发送的电子邮件中插入 Outlook 签名

以上述情况为例,您利用上述 VBA 代码将当前工作表作为 PDF 文件附件从 Excel 发送,但没法将 Outlook 签名添加到消息窗口。 要在从 Excel 发送的电子邮件中保存 Outlook 默许签名,以下方法将有所帮助。

下面列出了两个 VBA 代码。

VBA 代码 1:该代码有助于保存 Outlook 签名。

VBA 代码 2:该代码有助于将当前工作表作为 PDF 附件经过电子邮件发送。

VBA 代码 1:保存 Outlook 签名

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

VBA 代码 2:将当前工作表作为 PDF 附件经过电子邮件发送

Sub SendWorkSheetToPDF()

'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 = ""

.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 for Applications 窗口。

2。 在里面 Microsoft Visual Basic for Applications 窗口中,单击 插入 > 模块. 然后将上面的VBA代码2粘贴到Module(Code)窗口中。

3、要在Excel发送的邮件中保存Outlook默许签名,需要修改VBA代码2以下:

1)更换 。身体 符合 VBA代码1;
2) 移动线 。显示 线下 使用 OutlookMail(或使用其他代码中的 xMailOut)。 看截图:

这是修改后的完全代码。

Sub SendWorkSheetToPDF()

'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 = ""

.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,则不履行任何操作。

1. 在包括销售表的工作表中,右键单击工作表选项卡,然后单击 查看代码 从右键单击菜单中。

2.在开幕 Microsoft Visual Basic for Applications 窗口中,将以下 VBA 代码粘贴到 表(代码) 窗口。

VBA代码:当单元格在Excel中到达某个值时自动发送电子邮件

Dim xRg As Range

'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 = ""

.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) 排队 .到= ,请更换 与真实收件人的电子邮件地址。 如果您需要多个电子邮件地址,请用分号分隔。
5) 更转业中的电子邮件主题 .Subject =“测试”.
6)在以下两行中:
.CC = "电子邮件地址"
.BCC =“电子邮件地址”
如果要添加 cc 和 bcc 收件人,请替换文本“电子邮件”在您需要的电子邮件地址的行中。
如果您不需要 cc 和 bcc 收件人,只需添加撇号 ' 每行之前。

从现在开始,当单元格 D6 中的值超过 10000 时,将创建一封电子邮件,以下面的屏幕截图所示。


3.2 单元格值更改时自动发送电子邮件

以下面的屏幕截图所示,假定您收到一个工作簿,其中包括不同工作表中的月销售额和工作表中的销售总额。 您需要验证销售总额,如果销售总额被修改,请将工作簿发送回发件人并通知发件人该单元格已被修改。

1. 在包括销售表的工作表中,右键单击工作表选项卡,然后单击 查看代码 从右键单击菜单中。

2.在开幕 Microsoft Visual Basic for Applications 窗口中,将以下 VBA 代码粘贴到工作表(代码)窗口中。

VBA代码:指订单元格值更改时自动发送电子邮件

Private Sub Worksheet_Change(ByVal Target As Range)

' 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 = ""

.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) 排队 .到= ,请更换 与真实收件人的电子邮件地址。 如果您需要多个电子邮件地址,请用分号分隔。
3) 更转业中的电子邮件主题 .Subject = "工作表已修改".
4)在以下两行中:
.CC = "电子邮件地址"
.BCC = "电子邮件地址"
如果要添加 cc 和 bcc 收件人,请替换文本“电子邮件”在您需要的电子邮件地址的行中。
如果您不需要 cc 和 bcc 收件人,只需添加撇号 ' 每行之前。

从现在开始,当单元格 B14 中的值产生变化时,将自动创建 Outlook 消息,以下面的屏幕截图所示。


3.3 保存工作簿时自动发送电子邮件

如果您有修改后需要与他人同享的工作簿,通常需要保存工作簿,启动电子邮件客户端,创建一个附有此工作簿的新电子邮件,撰写相应的字段,然后发送电子邮件。 本节将向您展现每次保存工作簿时自动创建电子邮件的方法。 请履行以下操作。

1。 按 其他 + F11 键打开 Microsoft Visual Basic for Applications 窗口。

2. 在此窗口中,双击 的ThisWorkbook专案 窗格,然后将以下 VBA 代码粘贴到 本工作簿(代码) 窗口。

VBA 代码:保存工作簿时自动发送电子邮件

Private Sub Workbook_AfterSave(ByVal Success As Boolean)

' 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 = ""

.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) 排队 .到= ,请更换 与真实收件人的电子邮件地址。 如果您需要多个电子邮件地址,请用分号分隔。
2)在行中分别更改电子邮件主题和正文 .Subject = "工作簿已更新".Body = "Hi," & Chr(13) & Chr(13) & "文件现已更新。".
3)在以下两行中:
.CC = "电子邮件地址"
.BCC = "电子邮件地址"
如果要添加 cc 和 bcc 收件人,请替换文本“电子邮件”在您需要的电子邮件地址的行中。
如果您不需要 cc 和 bcc 收件人,只需添加撇号 ' 每行之前。

3. 从现在开始,在保存工作簿时按 按Ctrl + S 键或单击 节省 按钮,将自动创建 Outlook 电子邮件。 您可以看到当前工作簿作为附件附加,并且字段填充了指定的内容。 看截图:

保养诀窍:如果您常常使用此工作簿,这里建议您将工作簿另存为 Excel启用宏的工作簿 保存 VBA 脚本以供将来使用。 步骤以下。

1)点击 文件 > 另存为,然后选择一个文件夹来保存文件。
2)在 另存为 对话框中,针对需要重命名文件 文件名 文本框,选择 Excel启用宏的工作簿保存类型 下拉列表,最后单击 节省 按钮。 看截图:


3.4 在特定时间自动发送电子邮件

假定您需要向某人发送一封包括任务分配工作簿的电子邮件 每週5早上 9 点,并希望在 Excel 中自动履行此操作,而无需手动操作电子邮件客户端。 本节将向您展现完成它的方法。

1。 按 其他 + F11 键打开 Microsoft Visual Basic for Applications 窗口。

2。 在里面 Microsoft Visual Basic for Applications 窗口中,单击 插入 > 模块。 然后将以下 VBA 代码粘贴到模块窗口中。

VBA 代码 1:将当前工作簿作为 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()

'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 = ""

.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. 在此窗口中,双击 的ThisWorkbook专案 窗格,然后将以下 VBA 代码粘贴到 本工作簿(代码) 窗口。

VBA代码2:在特定时间自动发送电子邮件

Private Sub Workbook_Open()

Application.OnTime TimeValue("09:00:00"), "Timer"

End Sub

笔记:

1) 在 VBA 代码 1 中, 星期5 下一行中的意思是电子邮件将在每週5自动发送;
如果工作日(日期)= vbFriday 那幺
2) 在 VBA 代码 1 和 VBA 代码 2 中,时间 09:00:00 表示电子邮件将在某一天早上 9 点发送。
您可以针对需要更改日期和时间。
3) 代码运行时,将创建一封电子邮件。 如果不想弹出消息窗口需要直接发送,请去掉该行 。显示 从 VBA 代码 1 中删除 撇号 行前 '。发送.

4. 保存代码,然后将工作簿另存为启用 Excel 宏的工作簿,以下所示。

4.1)点击 文件 > 另存为,然后选择一个文件夹来保存文件。
4.2)在 另存为 对话框中,针对需要重命名文件 文件名 文本框,选择 Excel启用宏的工作簿保存类型 下拉列表,最后单击 节省 按钮。 看截图:

5. 打开您保存的启用宏的工作簿,当日期和时间到达时,将自动创建或发送一封电子邮件。


4. 附加主题

本节搜集您在从 Excel 发送电子邮件时可能遇到的其他主题。

4.1 从 Excel 中经过电子邮件发送一系列单元格(使用 VBA 脚本)

假定 Excel 工作表中存在以下图所示的月销售额表,您需要将此月销售额表作为电子邮件正文内容或直接作为附件发送给其他人。 在这里,我们为您提供两类方法来完成它。

4.1.1 经过电子邮件将范围作为 Excel 正文内容的一部份

您可以运行以下 VBA 代码从 Excel 发送一系列单元格作为电子邮件正文内容的一部份

1。 按 其他 + F11 键打开 Microsoft Visual Basic for Applications 窗口。

2。 在里面 Microsoft Visual Basic for Applications 窗口中,单击 工具 > 参考。 然后检查 Microsoft Outlook 16.0 对像库 框并单击 OK参考– VBAProject 对话框。

3。 点击 插入 > 模块,然后将以下 VBA 代码粘贴到 模块(代码) 窗口。

VBA 代码:从 Excel 发送一系列单元格作为电子邮件正文内容的一部份

Sub SendARangeofCells()

' 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", "tools 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 = ""

.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, ⑵)

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) 排队 .到= ,请更换 与真实收件人的电子邮件地址。 如果您需要多个电子邮件地址,请用分号分隔。
2)在以下两行中:
.CC = "电子邮件地址"
.BCC = "电子邮件地址"
如果要添加 cc 和 bcc 收件人,请替换文本“电子邮件”在您需要的电子邮件地址的行中。
如果您不需要 cc 和 bcc 收件人,只需添加撇号 ' 每行之前。

4。 按 F5 运行代码的关键。 在弹出的 Excel的tools 对话框,选择您需要作为电子邮件正文内容的一部份发送的单元格范围,然后单击 OK。 看截图:

然后将自动创建 Outlook 电子邮件。 您可以看到您在工作表当选择的范围已插入到电子邮件正文中。 看截图:


4.1.2 经过电子邮件将范围作为 Excel 的附件

如果您需要经过电子邮件将工作表中的一系列单元格作为 Excel 的附件发送。 您可以尝试以下 VBA 代码。

1。 按 其他 + F11 键。

2.在开幕 Microsoft Visual Basic for Applications 窗口中,单击 插入 > 模块. 然后将以下 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 = "toolsforExcel"

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 = ""

.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) 排队 .到= ,请更换 与真实收件人的电子邮件地址。 如果您需要多个电子邮件地址,请用分号分隔。
2)在行中分别更改电子邮件主题和电子邮件正文 .Subject = "2021 年月销售额".Body = "您好,请查看并浏览此文档。";
3)在以下两行中:
.CC = "电子邮件地址"
.BCC = "电子邮件地址"
如果要添加 cc 和 bcc 收件人,请替换文本“电子邮件地址”在您需要的电子邮件地址的行中。
如果您不需要 cc 和 bcc 收件人,只需添加撇号 ' 每行之前。

3。 按 F5 运行代码的关键。 在弹出的 Excel的tools 对话框中,选择您需要在电子邮件中作为附件发送的单元格范围,然后单击 OK。 看截图:

然后将自动创建 Outlook 电子邮件。 您在工作表当选择的单元格范围将保存为 Excel 工作簿并附加在“消息”窗口中。 看截图:


4.2 在 Excel 中单击按钮时发送电子邮件

举例来看,如果您需要单击命令按钮来触发宏以从 Excel 发送电子邮件,则经过单击工作表中的命令按钮将当前工作簿作为附件发送给其他人。 您可以依照以下步骤完成。

1。 点击 开发者 > 插入 > 命令按钮(ActiveX控件). 然后在工作表中绘制一个命令按钮。

保养诀窍:如果您已有命令按钮,请跳过此步骤。

2。 按 其他 + F11 键打开 Microsoft Visual Basic for Applications 窗口。 在窗口中,单击 插入 > 模式,然后将 VBA 代码(用于将当前工作簿作为 Excel 的附件经过电子邮件发送的代码)粘贴到“模块(代码)”窗口中。

点击这里获得代码.

备注:这里您在第 2 步中创建的宏的名称是 发送工作簿.

3。 按 其他 + Q 关闭键 Microsoft Visual Basic for Applications 窗口。

4. 现在您需要将宏分配给命令按钮。 右键单击命令按钮,选择 查看代码 从右键单击菜单。

5.然后 Microsoft Visual Basic for Applications 弹出窗口,可以看到下面两行列在 表(代码) 窗口。

Private Sub CommandButton1_Click()

End Sub

6. 在命令按钮的子进程中输入现有宏的名称。

7。 按 其他 + Q 关闭键 Visual Basic 编辑器,然后点击 开发者 > 设计模式 关闭设计模式。

现在您可以单击命令按钮以将当前工作簿作为电子邮件中的附件发送电子邮件。


4.3 从指定的电子邮件帐户发送电子邮件

通常,当使用 VBA 代码从 Excel 启动电子邮件时,发件人的电子邮件帐户是 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("") Then 'Specify your email account here

OutlookMail.SendUsingAccount = xAccount

End If

Next

如何使用上面的 VBA 代码?

1)在你自己的代码中,你需要替换如“将 OutlookMail 调暗为对象” 带有 VBA 代码 1;
2)在“行”下面添加VBA代码2在毛病恢复下一页”在你的代码中。 然后指定用于在 VBA 代码 2 中发送电子邮件的电子邮件地址。

在此示例中,我们将指定某个电子邮件帐户以将当前工作簿作为附件从 Excel 发送。 请履行以下操作。

1。 按 其他 + F11 键。 在里面 Microsoft Visual Basic for Applications 窗口中,单击 工具 > 参考。 然后检查 Microsoft Outlook 16.0 对像库 框并单击 OK参考– VBAProject 对话框。

2。 点击 插入 > 模块. 然后将以下 VBA 代码粘贴到 模块(代码) 窗口。

VBA 代码:经过指定的 Outlook 帐户将当前工作簿作为电子邮件附件从 Excel 发送

Sub SendWorkBook()

'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("") Then 'Specify your email account here

OutlookMail.SendUsingAccount = xAccount

End If

Next

'End

With OutlookMail

.To = ""

.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 for Applications 窗口中,将以下 VBA 代码粘贴到 表(代码) 窗口。

VBA 代码:在到期日到期时自动发送电子邮件

Public Sub SendMailDueDate()

' 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 = Range("E2:E7")
设置 xRgSend = Range("C2:C7")
设置 xRgText = Range("D2:D7")
2) 以下行表示截止日期必须大于 1 天且等于或小于从今天开始的 7 天。 您可以针对需要更改它。
如果 CDate(xRgDateVal) - 日期 <= 7 并且 CDate(xRgDateVal) - 日期 > 0 那幺
3) 排队 .到= ,请更换 与真实收件人的电子邮件地址。 如果您需要多个电子邮件地址,请用分号分隔。
4) 更转业中的电子邮件主题 .Subject = "工作表已修改".
5)在以下两行中:
.CC = "电子邮件地址"
.BCC = "电子邮件地址"
如果要添加 cc 和 bcc 收件人,请替换文本“电子邮件”在您需要的电子邮件地址的行中。
如果您不需要 cc 和 bcc 收件人,只需添加撇号 ' 每行之前。

3。 按 F5 运行代码的关键。 然后,如果到期日期符合条件,则会创建相应的电子邮件。 在这类情况下,将创建两封电子邮件,以下面的屏幕截图所示。


5. 一个方便的工具,可帮助您轻松地从 Excel 发送电子邮件

如果您是 VBA 新手,上述方法可能对您来讲不太容易处理。 在这里我们推荐 Excel的tools“ 发电子邮件 功能,使用此功能,您只需单击几下便可轻松地从 Excel 发送电子邮件。 请履行以下操作。

申请前 Excel的tools首先下载并安装.

5.1 轻松创建包括您需要的电子邮件字段的邮件列表

在利用发送电子邮件功能之前,您需要创建一个包括您需要的电子邮件字段的邮件列表。 在这里,创建邮件列表功能可以提供帮助。

1。 点击 tools 加 > 创建邮件列表.

2.在开幕 创建邮件列表 窗口,您需要进行以下配置。

2.1)在 邮件列表列 部份,检查您的电子邮件中需要的字段;
2.2)在 附加文件 部份,检查您可能需要的一个或多个附件;
2.3) 指定放置邮件列表的位置;
2.4)点击 创建 按钮。 看截图:

然后创建一个示例邮件列表表,以下面的屏幕截图所示。

3. 现在需要将样本中的原始数据替换为自己的字段数据。

现在您已创建了一个邮寄列表表。 请继续申请 发电子邮件 针对您创建的字段从 Excel 发送电子邮件的功能。

  如果您想免费试用(30天)此实用程序, 请点击下载,然后依照上述步骤进行操作。


5.2 轻松发送电子邮件,包括您在邮件列表中创建的字段

创建邮件列表后(点击了解如何) 包括您在电子邮件中可能需要的字段,您现在可使用这些字段从 Excel 发送电子邮件。

1.选择全部邮件列表,点击 tools 加 > 发电子邮件.

2。 在里面 发电子邮件 对话框,请进行以下配置。

2.1) 字段由您在邮件列表中指定的字段自动填充到每一个字段的对话框中;
保养诀窍:如果您此时不需要某个字段,请在下拉列表当选择一个空白选项。
2.2) 插入佔位符 (可选):如果您需要在电子邮件正文中插入可变信息。
举例来看,您可能需要向多个收件人发送一封电子邮件,每一个收件人都有个性化名称,您需要将光标放在需要插入佔位符的电子邮件正文中,选择字段“E:名字”(或电子邮件列表中的其他名称字段),然后单击插入 佔位符 按钮;
当收件人收到电子邮件时,电子邮件正文保持不变,但每一个人的名称都是唯一的。
2.3)针对需要撰写电子邮件正文;
2.4) 确保 经过Outlook发送电子邮件 复选框已选中;
2.5)点击 送出 按钮。 看截图:

3.然后 Excel的tools 弹出对话框告知您发送了多少封电子邮件,单击 OK 按钮关闭此对话框。

保养诀窍:您可以转到 发送的邮件 Outlook 中的文件夹以检查您发送的电子邮件。


5.3 轻松发送带有 HTML 正文的电子邮件(包括超链接、图片等)

此发送电子邮件功能允许您构造 html 电子邮件,其中包括超链接、图象、不同的字体大小和字体色彩等。

后 创建一个包括您需要的电子邮件字段的邮件列表,

当你 配置发送电子邮件对话框,您可使用工具栏上的选项使正文内容丰富。

请参阅下面的屏幕截图:


5.4 发送邮件时轻松插入 Outlook 默许签名

在上述方法中,我们演示了一个 VBA 代码来帮助您发送带有 Outlook 默许签名的电子邮件。 使用发送电子邮件功能,您只需选中一个选项,然后 Outlook 默许签名将插入您从 Excel 发送的电子邮件中。

后 创建一个包括您需要的电子邮件字段的邮件列表,

时间 配置发送电子邮件对话框,你需要点击 选项 > 使用Outlook的签名设置.

备注: 请确保在使用 Outlook 的签名设置选项前显示复选标记。

当收件人收到电子邮件时,他们可以看到电子邮件正文末尾显示的 Outlook 默许签名。


5.5 从指定的电子邮件帐户轻松发送电子邮件

要使用特定电子邮件帐户从 Excel 发送电子邮件,而不是使用默许帐户,发送电子邮件功能也能够帮助轻松完成。

后 创建一个包括您需要的电子邮件字段的邮件列表,

时间 配置发送电子邮件对话框,你需要点击 选项 > 来自,然后单击您需要从中发送电子邮件的电子邮件帐户。

备注:选择邮箱账号后,前面会显示一个复选标记。

点击 这里 了解有关此发送电子邮件功能的更多信息。

  如果您想免费试用(30天)此实用程序, 请点击下载,然后依照上述步骤进行操作。

总之,从 Excel 发送电子邮件在我们的平常工作中非常有用。 本文涵盖了从 Excel 发送电子邮件的更全面的主题,如果有其他主题或更简单的解决方案,请发表评论让我知道。


选择英雄云云表单=选择更智能的Excel

>>>>🚀🌟 点击注册 免费试用 更高级的-英雄云企业级云表单 🌟🚀 😃👉🌐>>>>

在现代企业管理中,数据的高效管理和处理至关重要。随着信息技术的不断发展,英雄云云表单已经成为了提高数据录入、管理和分析效率的不可或缺的工具。让我们来深入探讨英雄云-云表单的几大优势。

基础字段:多样性满足业务需求

英雄云云表单中包括了各种基础字段,如单行文本多行文本数字输入框单选框复选框下拉框下拉复选框日期时间分割线等。这些字段的多样性使用户可以根据具体的业务需求,轻松进行文本、数据和时间信息的录入或修改。例如,您可以使用单行文本字段录入员工姓名、产品型号等,或者使用下拉框进行多选,根据不同情况选择更加方便的字段类型。

高级字段:提升工作效率

英雄云云表单还提供了高级字段,如地址图片附件手写签名手机子表关联数据关联查询以及流水号。这些高级字段在基础字段的基础上升级,可帮助用户完成一些琐碎的工作。例如,使用地址字段可以避免逐字打字,而流水号字段可以自动生成规律性的编号,非常适用于合同编号生成等场景。

部门成员字段:精确管理与通讯录的关联

英雄云的部门成员字段允许企业对各个部门的成员进行精确管理。用户可以通过部门成员字段获取通讯录中的部门成员信息,应用于记录报销人、报销部门等场景。这些成员字段还细分为成员单选成员多选,可根据具体需求在通讯录中选择一个或多个成员。

聚合表:数据处理更智能

英雄云聚合表功能用于对已存在的表单数据进行聚合计算,从而得到一张聚合表,后续其他表单可调用聚合表进行数据联动、关联查询和关联数据等操作完成数据处理。这一功能可应用于多种场景,如进销存管理、财务管理和门店零售管理等,帮助企业完成数据处理,提高工作效率。

表单权限设置:灵活管理数据访问

英雄云的表单权限设置允许用户根据企业的具体需求管理表单的访问和操作权限。用户可以根据系统权限或自定义权限对不同成员或团队进行权限设置,以确保数据的安全和合规性。这一功能使企业能够根据变化的业务需求和团队结构,实时调整权限设置。

自定义打印模板:文档输出更便捷

英雄云云表单支持自定义打印模板,可将表单数据转换为可打印的Word文档。用户可以根据自己的需求进行排版和编辑,将产品规格说明书等文档轻松生成。这一功能提供了一种标准化的文档输出方式,简化了信息整理的过程。

综合来看,选择英雄云云表单意味着选择更智能、更灵活、更高效的数据管理工具。无论是提高工作效率,精确管理数据,还是实现数据处理,英雄云云表单都能满足您的多样化需求,助力您的业务发展。

如果您正在寻找一款强大的云表单工具,不妨考虑英雄云,它将为您带来更多的便捷和智能,助您事半功倍。


免责声明:

本网址(www.yingxiongyun.com)发布的材料主要源于独立创作和网友匿名投稿。此处提供的所有信息仅供参考之用。我们致力于提供准确且可信的信息,但不对材料的完整性或真实性作出任何保证。用户应自行验证相关信息的正确性,并对其决策承担全部责任。对于由于信息的错误、不准确或遗漏所造成的任何损失,本网址不承担任何法律责任。本网站所展示的所有内容,如文字、图像、标志、音频、视频、软件和程序等的版权均属于原创作者。如果任何组织或个人认为网站内容可能侵犯其知识产权,或包含不准确之处,请即刻联系我们进行相应处理。

上一篇:如何检查Excel中指订单元格中的第一个字母是不是为大写?-英雄云拓展知识分享
下一篇:如何在每一个单元格的第一个单词后添加逗号?-英雄云拓展知识分享
相关文章

 发表评论

暂时没有评论,来抢沙发吧~

×