跳到主要内容

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

通常,我们使用 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”中。
友好名称 (可选):单元格中显示的跳跃值。

1.1.1.1 将电子邮件地址添加到超链接公式

在这里我们用 “邮寄:” 作为添加电子邮件收件人的公式的一部分。 在此示例中,第一个收件人的电子邮件地址在单元格 B2 中,因此我们需要添加“mailto:”并将其引用到单元格 B2。

“邮寄:”&B2

1. 选择一个单元格以显示超链接。 在这种情况下,我选择单元格 F2。

2.然后输入以下公式。

=HYPERLINK("mailto:"&B2)

备注:如果按 输入 键,将创建一个超链接,如下面的屏幕截图所示。 当您单击该链接时,将创建一封 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)

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

要在单独的行中显示电子邮件正文,您需要通过添加回车字符代码来修改单元格内容 %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)

输入 获得结果的关键。

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


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

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

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

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

2.1)选择 电子邮箱 在左侧窗格中。
2.2)在 显示文字 文本框,输入要在单元格中显示的文本;
Tips:您不能在此对话框中使用单元格引用,因此您应该手动输入电子邮件字段,如下所示。
2.3)在 电子邮件地址 文本框,您需要输入以下电子邮件地址。
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应用程序 窗口。

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)如果不想弹出上述对话框,想直接在代码中指定邮箱地址范围,请替换此行:
Set xRg = Application.InputBox("请选择地址列表:", "Kutools for Excel", xTxt, , , , , 8)
设置 xRg = Range("A2:A7")
2) 您可以在以下几行中指定您自己的电子邮件主题和正文:
.Subject = "测试"
.Body = "Dear " _
        & vbNewLine & vbNewLine & _
        "This is a test email " & _
        "sending in Excel"
3) 要直接发送邮件而不打开以下新消息窗口,您需要替换此行:
。显示
。发送

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


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

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

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

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

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

笔记:

1)如果不想弹出上述对话框,想直接在代码中指定邮箱地址范围,请替换此行:
Set xRg = Application.InputBox("请选择地址列表:", "Kutools for Excel", xTxt, , , , , 8)
设置 xRg = Range("A2:A7")
2) 您可以在以下几行中指定您自己的电子邮件主题和正文:
.Subject = "Test"
.Body = "Dear " _
        & vbNewLine & vbNewLine & _
        "This is a test email " & _
        "sending in Excel"
3)不打开以下消息窗口直接发送电子邮件,您需要替换此行:
。显示
。发送

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

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


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

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

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 = ""
            .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应用程序 窗口中,单击 > 模块. 然后将以下 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 = ""
    .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应用程序 窗口中,单击 插页 > 模块。 然后将以下 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 = ""
    .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应用程序 窗口中,单击 插页 > 模块。 然后将以下 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 = ""
       .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, ".", -1, 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应用程序 窗口中,单击 > 模块。 然后将以下 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 = ""
    .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()
'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 = ""
    .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粘贴到Module(Code)窗口中。

3、要在Excel发送的邮件中保留Outlook默认签名,需要修改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 = ""
    .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应用程序 窗口中,将以下 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 = ""
.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应用程序 窗口中,将以下 VBA 代码粘贴到工作表(代码)窗口中。

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 = ""
.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应用程序 窗口。

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

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 = ""
        .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 电子邮件。 您可以看到当前工作簿作为附件附加,并且字段填充了指定的内容。 看截图:

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

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


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

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

1。 按 其他 + F11 键打开 Microsoft Visual Basic应用程序 窗口。

2.在 Microsoft Visual Basic应用程序 窗口中,单击 插页 > 模块。 然后将以下 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()
'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 = ""
    .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 中, 周五 下一行中的意思是电子邮件将在每周五自动发送;
如果工作日(日期)= 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应用程序 窗口。

2.在 Microsoft Visual Basic应用程序 窗口中,单击 工具 > 参考资料。 然后检查 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 = ""
        .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) 排队 .到= ,请更换 与真实收件人的电子邮件地址。 如果您需要多个电子邮件地址,请用分号分隔。
2)在以下两行中:
.CC = "电子邮件地址"
.BCC = "电子邮件地址"
如果要添加 cc 和 bcc 收件人,请替换文本“电子邮件”在您需要的电子邮件地址的行中。
如果您不需要 cc 和 bcc 收件人,只需添加撇号 ' 在每一行之前。

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 = ""
    .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 运行代码的关键。 在弹出的 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 从指定的电子邮件帐户发送电子邮件

通常,当使用 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应用程序 窗口中,单击 工具 > 参考资料。 然后检查 Microsoft Outlook 16.0 对象库 框并单击 OK ,在 参考– VBAProject 对话框。

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

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

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("") 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应用程序 窗口中,将以下 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 = 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 新手,上述方法可能对您来说不太容易处理。 在这里我们推荐 Kutools for Excel发电子邮件 功能,使用此功能,您只需单击几下即可轻松地从 Excel 发送电子邮件。 请执行以下操作。

申请前 Kutools for Excel首先下载并安装.

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

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

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

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

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

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

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

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

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


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

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

1.选择整个邮件列表,点击 Kutools 加 > 发电子邮件.

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

2.1) 字段由您在邮件列表中指定的字段自动填充到每个字段的对话框中;
Tips:如果您此时不需要某个字段,请在下拉列表中选择一个空白选项。
2.2) 插入占位符 (可选):如果您需要在电子邮件正文中插入可变信息。
例如,您可能需要向多个收件人发送一封电子邮件,每个收件人都有个性化名称,您需要将光标放在需要插入占位符的电子邮件正文中,选择字段“E:名字”(或电子邮件列表中的其他名称字段),然后单击插入 占位符 按钮;
当收件人收到电子邮件时,电子邮件正文保持不变,但每个人的名称都是唯一的。
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 人工智能助手:基于以下内容彻底改变数据分析: 智能执行   |  生成代码  |  创建自定义公式  |  分析数据并生成图表  |  调用 Kutools 函数...
热门特色: 查找、突出显示或识别重复项   |  删除空白行   |  合并列或单元格而不丢失数据   |   不使用公式进行四舍五入 ...
超级查询: 多条件VLookup    多值VLookup  |   跨多个工作表的 VLookup   |   模糊查询 ....
高级下拉列表: 快速创建下拉列表   |  依赖下拉列表   |  多选下拉列表 ....
列管理器: 添加特定数量的列  |  移动列  |  切换隐藏列的可见性状态  |  比较范围和列 ...
特色功能: 网格焦点   |  设计图   |   大方程式酒吧    工作簿和工作表管理器   |  资源库 (自动文本)   |  日期选择器   |  合并工作表   |  加密/解密单元格    按列表发送电子邮件   |  超级筛选   |   特殊过滤器 (过滤粗体/斜体/删除线...)...
前 15 个工具集12 文本 工具 (添加文本, 删除字符,...)   |   50+ 图表 类型 (甘特图,...)   |   40+ 实用 公式 (根据生日计算年龄,...)   |   19 插入 工具 (插入二维码, 从路径插入图片,...)   |   12 转化 工具 (小写金额转大写, 货币兑换,...)   |   7 合并与拆分 工具 (高级组合行, 分裂细胞,...)   |   ... 和更多

使用 Kutools for Excel 增强您的 Excel 技能,体验前所未有的效率。 Kutools for Excel 提供了 300 多种高级功能来提高生产力并节省时间。  单击此处获取您最需要的功能...

产品描述


Office Tab 为 Office 带来选项卡式界面,让您的工作更加轻松

  • 在Word,Excel,PowerPoint中启用选项卡式编辑和阅读,发布者,Access,Visio和Project。
  • 在同一窗口的新选项卡中而不是在新窗口中打开并创建多个文档。
  • 每天将您的工作效率提高50%,并减少数百次鼠标单击!
Comments (0)
No ratings yet. Be the first to rate!
There are no comments posted here yet
Please leave your comments in English
Posting as Guest
×
Rate this post:
0   Characters
Suggested Locations