跳到主要內容

Excel 教程 – 從 Excel 發送電子郵件

通常,我們使用 Outlook、Gmail 等電子郵件客戶端來發送電子郵件。 但是,許多人將數據存儲在 Excel 工作簿中,並且在使用這些數據時需要將一些數據發送給其他人。 因此,他們需要直接從 Excel 工作簿發送電子郵件,這樣可以節省操作電子郵件客戶端的時間。 本分步教程將向您展示如何在不同條件下從 Excel 發送電子郵件。

備註:在應用以下方法之前,您需要在您的計算機中配置一個 Outlook 電子郵件客戶端,並將其設置為您的默認電子郵件客戶端。

目錄: [ 隱藏 ]

(單擊下面目錄中的任何標題或在右側導航到相應的章節。)

1. 從 Excel 發送電子郵件的基礎知識

本節介紹從 Excel 發送電子郵件的基礎知識。

1.1 使用 Excel 內置功能從 Excel 發送電子郵件

如果您只想從 Excel 發送簡單的電子郵件,僅包括收件人、主題、抄送和正文字段。 Excel 中的內置函數可以提供幫助。


1.1.1 從 Excel 發送帶有公式的電子郵件

如下表所示,要根據給定字段從 Excel 發送不同的電子郵件,您可以使用給定字段的單元格引用創建不同的超鏈接公式來完成它。 創建電子郵件超鏈接後,您可以單擊需要自動發送電子郵件的超鏈接。

注意: 如果收件人或抄送字段中有多個收件人,請用分號分隔。

本節分為四個部分,向您展示將電子郵件地址、抄送收件人、主題行和正文分別添加到超鏈接公式的步驟。 請執行以下操作。

的語法和參數 超級鏈接 功能如下。

句法

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()
'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 運行代碼的鍵和 Excel的Kutools 對話框彈出。 選擇電子郵件地址列表並單擊 OK.

筆記:

1)如果不想彈出上述對話框,想直接在代碼中指定郵箱地址範圍,請替換此行:
Set xRg = Application.InputBox("請選擇地址列表:", "Kutools 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()
'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 運行代碼的鍵和 Excel的Kutools 對話框彈出。 選擇電子郵件地址列表並單擊 確定。

筆記:

1)如果不想彈出上述對話框,想直接在代碼中指定郵箱地址範圍,請替換此行:
Set xRg = Application.InputBox("請選擇地址列表:", "Kutools 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
。發送

在此示例中,所選範圍內有六個電子郵件地址,因此將自動創建六個 Outlook 消息窗口,並在“收件人”字段中列出單獨的電子郵件地址,如下面的屏幕截圖所示。

5.最後,單擊 送出 按鈕逐一發送電子郵件。


2. 在從 Excel 發送的電子郵件中插入附件或 Outlook 簽名(使用 VBA 腳本)

本節將向您展示如何在從 Excel 發送的電子郵件中插入附件或 Outlook 默認簽名。

2.1 在從 Excel 發送的電子郵件中插入附件

這裡我們描述插入附件的不同情況,您可以根據自己的需要選擇方法。 在本節中,您可以學習(單擊以下任何鏈接以導航到相應的方法):


2.1.1 將某個文件作為附件發送電子郵件

您可以應用以下 VBA 代碼將文件夾中的一個或多個文件作為 Excel 的附件發送給電子郵件。

1。 按 其他 + F11 鍵。

2.在開幕 Microsoft Visual Basic for Applications 窗口中,單擊 插入 > 模塊. 然後將以下 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 for Applications 窗口中,單擊 > 模塊. 然後將以下 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 for Applications 窗口中,單擊 插入 > 模塊。 然後將以下 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 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, ".", -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 for Applications 窗口中,單擊 > 模塊。 然後將以下 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 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()
'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 for Applications 窗口中,將以下 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 for Applications 窗口中,將以下 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 for Applications 窗口。

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 電子郵件。 您可以看到當前工作簿作為附件附加,並且字段填充了指定的內容。 看截圖:

保養竅門:如果您經常使用此工作簿,這裡建議您將工作簿另存為 Excel啟用宏的工作簿 保存 VBA 腳本以供將來使用。 步驟如下。

1)點擊 文件 > 另存為,然後選擇一個文件夾來保存文件。
2)在 另存為 對話框中,根據需要重命名文件 文件名 文本框,選擇 Excel啟用宏的工作簿 ,在 保存類型 下拉列表,最後單擊 節省 按鈕。 看截圖:


3.4 在特定時間自動發送電子郵件

假設您需要向某人發送一封包含任務分配工作簿的電子郵件 每週五早上 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()
'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 for Applications 窗口。

2。 在裡面 Microsoft Visual Basic for Applications 窗口中,單擊 工具 > 參考。 然後檢查 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 運行代碼的關鍵。 在彈出的 Excel的Kutools 對話框,選擇您需要作為電子郵件正文內容的一部分發送的單元格範圍,然後單擊 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 = "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 運行代碼的關鍵。 在彈出的 Excel的Kutools 對話框中,選擇您需要在電子郵件中作為附件發送的單元格範圍,然後單擊 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()
'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 for Applications 窗口中,將以下 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 新手,上述方法可能對您來說不太容易處理。 在這裡我們推薦 Excel的Kutools發電子郵件 功能,使用此功能,您只需單擊幾下即可輕鬆地從 Excel 發送電子郵件。 請執行以下操作。

申請前 Excel的Kutools首先下載並安裝.

5.1 輕鬆創建包含您需要的電子郵件字段的郵件列表

在應用發送電子郵件功能之前,您需要創建一個包含您需要的電子郵件字段的郵件列表。 在這裡,創建郵件列表功能可以提供幫助。

1。 點擊 Kutools 加 > 創建郵件列表.

2.在開幕 創建郵件列表 窗口,您需要進行如下配置。

2.1)在 郵件列表列 部分,檢查您的電子郵件中需要的字段;
2.2)在 附加文件 部分,檢查您可能需要的一個或多個附件;
2.3) 指定放置郵件列表的位置;
2.4)點擊 創建 按鈕。 看截圖:

然後創建一個示例郵件列表表,如下面的屏幕截圖所示。

3. 現在需要將樣本中的原始數據替換為自己的字段數據。

現在您已經創建了一個郵寄列表表。 請繼續申請 發電子郵件 根據您創建的字段從 Excel 發送電子郵件的功能。

  如果您想免費試用(30天)此實用程序, 請點擊下載,然後按照上述步驟進行操作。


5.2 輕鬆發送電子郵件,包括您在郵件列表中創建的字段

創建郵件列表後(點擊了解如何) 包含您在電子郵件中可能需要的字段,您現在可以使用這些字段從 Excel 發送電子郵件。

1.選擇整個郵件列表,點擊 Kutools 加 > 發電子郵件.

2。 在裡面 發電子郵件 對話框,請進行以下配置。

2.1) 字段由您在郵件列表中指定的字段自動填充到每個字段的對話框中;
保養竅門:如果您此時不需要某個字段,請在下拉列表中選擇一個空白選項。
2.2) 插入佔位符 (可選):如果您需要在電子郵件正文中插入可變信息。
例如,您可能需要向多個收件人發送一封電子郵件,每個收件人都有個性化名稱,您需要將光標放在需要插入佔位符的電子郵件正文中,選擇字段“E:名字”(或電子郵件列表中的其他名稱字段),然後單擊插入 佔位符 按鈕;
當收件人收到電子郵件時,電子郵件正文保持不變,但每個人的名稱都是唯一的。
2.3)根據需要撰寫電子郵件正文;
2.4) 確保 通過Outlook發送電子郵件 複選框已選中;
2.5)點擊 送出 按鈕。 看截圖:

3.然後 Excel的Kutools 彈出對話框告訴您發送了多少封電子郵件,單擊 OK 按鈕關閉此對話框。

保養竅門:您可以轉到 發送的郵件 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選項卡為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