如何在 Excel 中使用 VBA 傳送電子郵件:Outlook 的 11 個步驟

Excel VBA 可以產生包含收件者、主題、內文和工作簿附件的 Outlook 電子郵件。本指南共 11 步,使用經典版 Windows Outlook,並將郵件以草稿形式打開,以便您在發送前進行驗證。微軟已將 VBA 巨集和 Outlook 物件模型列為新版 Outlook 不支援的功能,因此本範例基於 COM,無法在新版 Outlook 或瀏覽器中使用 Outlook。

在開始之前,請儲存您的工作並確認已安裝經典版 Outlook 並配置了電子郵件帳戶。程式碼使用後期綁定,因此您無需新增特定版本的 Outlook 庫引用。

只需 11 步,即可使用 Excel VBA 發送電子郵件

1. 確認經典版 Outlook 可用

開啟桌面版 Outlook,並確保其信箱可以傳送郵件。此巨集需要經典版 Outlook for Windows;Outlook.com 標籤頁、Outlook 網頁版和新版 Outlook 皆不提供此處使用的 COM 自動化物件。請參閱 Microsoft 的經典版和新版 Outlook 功能比較。

Excel 工作簿,其後開啟經典的 Outlook 桌面視窗。
步驟 1:使用 Windows 桌面版 Excel 和經典版 Outlook。

2. 將工作簿另存為啟用巨集的文件

在 Excel 中,選擇「檔案」>「另存為」,然後選擇「啟用巨集的 Excel 工作簿 (*.xlsm)」。普通的 .xlsx 檔案無法保留 VBA 程式碼。將工作簿儲存到您可以存取並記住其路徑的位置。

在「Excel 另存為」對話方塊中,選擇啟用巨集的 .xlsm 工作簿類型。
步驟 2:儲存時選擇啟用巨集的 .xlsm 格式。

3. 開啟 Visual Basic 編輯器

在 Excel 桌面應用程式中開啟工作簿後,按Alt+F11。在「專案資源管理器」中,找到名稱與工作簿相符的項目。如果編輯器處於隱藏狀態,請按 Ctrl+R 顯示「專案資源管理器」。

Visual Basic 編輯器顯示了 Excel 工作簿專案和一個空白的程式碼窗格。
步驟 3:工作簿項目出現在 Visual Basic 編輯器中。

4. 插入標準模組

在 Visual Basic 編輯器中,選擇工作簿項目,選擇「插入」>「模組」,然後使用新程式碼窗格。標準模組適合放置按需運行的巨集。

Visual Basic 編輯器,勾選「插入」選單,並高亮顯示「模組」指令。
步驟 4:插入巨集的標準模組。

5. 新增草稿建立宏

將此過程貼到模組中。它會檢查工作簿是否已儲存,驗證附件路徑,建立 Outlook 郵件,並將其顯示出來但不傳送。

包含 CreateOutlookDraft 流程開頭的 VBA 模組。
步驟 5:將該過程新增至新模組。
Option Explicit

Sub CreateOutlookDraft()
    Dim olApp As Object
    Dim olMail As Object
    Dim attachmentPath As String

    If Len(ThisWorkbook.Path) = 0 Then
        MsgBox "Save the workbook before creating the email.", vbExclamation
        Exit Sub
    End If

    attachmentPath = ThisWorkbook.FullName
    If Len(Dir$(attachmentPath)) = 0 Then
        MsgBox "Workbook attachment not found: " & attachmentPath, vbExclamation
        Exit Sub
    End If

    On Error Resume Next
    Set olApp = GetObject(, "Outlook.Application")
    If olApp Is Nothing Then
        Set olApp = CreateObject("Outlook.Application")
    End If
    On Error GoTo 0

    If olApp Is Nothing Then
        MsgBox "Classic Outlook could not be opened.", vbExclamation
        Exit Sub
    End If

    Set olMail = olApp.CreateItem(0)
    With olMail
        .To = "recipient@example.com"
        .CC = ""
        .Subject = "Monthly report"
        .Body = "Hi," & vbCrLf & vbCrLf & _
                "Please review the attached monthly report." & _
                vbCrLf & vbCrLf & "Thanks,"
        .Attachments.Add attachmentPath
        .Display
    End With

    Set olMail = Nothing
    Set olApp = Nothing
End Sub

數字參數0用於建立標準郵件項目。 Microsoft 文件中提到了 Application.CreateItem、Attachments.Add和MailItem.Display。

6. 替換範例電子郵件詳細信息

更改recipient@example.com為預期收件人。.CC如有需要,請新增地址,然後編輯.Subject文字.Body。文字值需用引號括起來,並使用 `<br>`&標籤連接行vbCrLf。範例使用純文字訊息,無需 HTML 格式。

VBA 編輯器,其中電子郵件巨集中突出顯示了範例收件者和主題欄位。
步驟 6:取代範例收件人;依照相同的步驟編輯主題和正文。

7. 選擇附件

依照目前的寫法,此方法ThisWorkbook.FullName會附加已儲存的啟用巨集的工作簿本身。如果您想要附加單獨的報表,請將該賦值替換為其完整的檔案路徑,例如 `/var/login/report/` "C:\Reports\MonthlyReport.xlsx"。運行巨集之前,請確認檔案存在且可存取。此Attachments.Add方法會將文件附加到郵件中。

VBA 程式碼在建立 Outlook 郵件之前檢查報告附件路徑。
步驟 7:確認附件路徑指向一個現有文件。

8. 保存巨集

在編輯器中按Ctrl+S儲存,或切換回 Excel 並儲存工作簿。請保留 .xlsm 格式;另存為 .xlsx 會刪除 VBA 項目。將檔案儲存在您信任的位置,並且不要在來自未知來源的工作簿中啟用巨集。

Excel 和 VBA 編輯器視窗顯示已儲存的 .xlsm 工作簿和儲存控制項。
步驟 8:儲存工作簿,同時保留 .xlsm 副檔名。

9. 運行該程式

點選文字方塊內部CreateOutlookDraft並按F5 鍵,或使用編輯器的「執行」指令。如果 Excel 阻止了巨集,請遵循您所在組織的策略。微軟指出,Office 預設會阻止標記為來自 Internet 的檔案中的巨集;請閱讀其巨集安全指南,而不是全域關閉保護功能。

Visual Basic 編輯器執行選單顯示所選巨集的 F5 命令。
步驟 9:從 Visual Basic 編輯器執行巨集。

10. 檢查草稿並自行發送

Outlook 應自動開啟一封郵件,郵件地址、主題、內文和工作簿附件均已填寫完畢。請核實每位收件人,並在必要時開啟附件。僅在檢查草稿後,才可點選 Outlook 的「傳送」.Display按鈕。程式碼刻意使用`<email>` 而非 `<email>` .Send,以防止自動發送拼字錯誤或過期的檔案。

經典 Outlook 草稿,包含收件者、主題和工作簿附件,可供審查。
步驟 10:檢視 Outlook 草稿和附件工作簿。
Outlook 的撰寫窗口,傳送按鈕可見,草稿仍處於開啟狀態。
確認訊息詳情後再發送。

11. 解決常見問題

  • 「ActiveX 元件無法建立物件」或 Outlook 不可用:請確認已安裝並設定 Windows 版經典 Outlook。新版 Outlook 和瀏覽器版 Outlook 不提供所需的 Outlook 物件模型。
  • 巨集將無法運作:請確認工作簿為 .xlsm 格式,並檢視 Excel 的安全性提示。不要為了繞過警告而啟用所有巨集;僅信任您認可的文件和發布者。
  • 附件缺失:請先儲存工作簿,或更正單獨報告的完整路徑。請檢查檔案是否位於不可用的磁碟機上。

此工作流程適用於您在經典版 Outlook 中審查並傳送的郵件。對於重複發送或無人值守的商務郵件,請使用組織認可的自動化服務,並單獨驗證收件者、附件和權限。

Excel 安全性警告,提示某個檔案的巨集已停用。
如果 Office 阻止了宏,請遵循微軟的安全指南和貴組織的策略。

(38) 評論

  1. 阿慶 -

    我之前有使用過 VBA,但對於發送郵件這部分還不是很懂,這篇文章真是太幫助我了!

  2. 志明 -

    這篇文章真是給了我靈感,我也想寫一個程式來自動發送郵件,覺得很有挑戰性!

  3. 小琪 -

    我想知道發送郵件的速度快不快?有沒有什麼影響因素呢

  4. 海棠 -

    感謝這篇文章,真的讓我對 VBA 有了全新的理解,對於發送郵件的步驟講解得非常清楚!

  5. 小風 -

    我之前用 VBA 發發資訊給客戶,但一直不順手,希望這次能學得更好

  6. 阿偉 -

    有沒有推薦的資源可以深入學習 VBA 呢?我想要更專業一點的知識

  7. 子君 -

    從這篇文章學到很多,尤其是錯誤處理的部分,這對我來說非常重要

  8. 小白 -

    這篇文章寫得真不錯!剛好我最近也想學習使用 VBA 發送電子郵件,感謝提供的11個步驟,非常詳細

  9. 金妮 -

    使用 VBA 發送郵件的過程一定要小心使用 SMTP 的設置,不然會出現錯誤

  10. 天下無敵 -

    哈哈,這樣的學習方式真的讓我感到興奮!希望快點能動手做

  11. 小偉 -

    我有一個問題,發送郵件的過程中如果出現錯誤,應該如何處理呢

  12. 小花 -

    使用 VBA 自動發送電子郵件的功能真的很實用,我已經試著將這個方法應用到我的工作中了

  13. 王小華 -

    這篇中包含的11個步驟是否能適用於不同版本的 Excel?我現在用的是 Excel 2016

  14. 莉莉 -

    這篇文章讓我想起我曾經嘗試用 VBA 做一個自動化報告,卻沒有成功!現在我想再試一次

  15. 阿龍 -

    這篇文章很實用,我學會了如何使用 VBA 發送郵件,真的省去了很多麻煩

  16. 雅婷 -

    謝謝你的分享!我一直在尋找這方面的資料,這下終於找到適合的學習資源了

  17. 小莉 -

    我在實作的時候遇到了一些問題,誰能幫我一下嗎?謝謝大伙

  18. 小妍 -

    對於初學者來說,這篇文章是否有配合的影片教學呢?我會比較容易理解。

  19. 小艾 -

    感謝分享!我會把這些步驟記下來,準備開始實踐了,每天都想學習新技能!

  20. 小霞 -

    看到這篇文章,我心裡超開心的,簡直是意外驚喜

  21. 慶慶 -

    我最近越來越喜歡 VBA 發送郵件,省掉了很多手動的麻煩,真棒

  22. 子嫻 -

    學習了這個知識點,未來在工作中一定會派上用場,謝謝作者的努力!

  23. 林樺 -

    很好奇作者是如何發現這些方法的?是否有什麼特別的學習經歷?

  24. 米莉 -

    學會這個真的是一大收穫!未來我也可以自動化發送報告,省時省力

  25. 小貓咪 -

    哈哈,學了這個功能讓我工作時忍不住想發一些好玩的郵件給同事!

  26. 小明 -

    我想請教,這11個步驟裡面,有哪個步驟是最容易出錯的呢?謝謝

  27. 小麥 -

    感謝分享,生活中學會用 VBA 發送郵件,真的讓我多了很多時間去做別的事

  28. 小真 -

    這篇文章的步驟真的是簡單易懂,對我這個平常不碰程式的人來說,真的超級友好!

  29. 文潔 -

    學會了這個技巧,感覺生活都變得更簡單了!謝謝這篇文章

  30. 小俊 -

    我覺得這篇文章指導得很好,我會分享給我的朋友們,讓他們也學習使用 VBA!

  31. 小草 -

    我第一次嘗試用 VBA 寫郵件程式,感覺好有成就感!希望能有更多範例可以學習

  32. 文婷 -

    學會用 VBA 發送電子郵件太棒了!我常常需要發送報告,這簡化了我的工作流程

  33. 小羽 -

    分享一下我的經驗,我最近用 VBA 發送郵件成功了,也幫同事完成了相同的功能,大家都很滿意

  34. 小如 -

    想問一下,使用 VBA 發送郵件的最佳實踐有哪些,大家有沒有建議?

  35. 張敏 -

    真的很開心我找到這篇文章,這是我學習 VBA 的起點!感謝你的分享

  36. 阿翰 -

    有沒有人曾經使用這個功能遭遇過什麼問題?我想了解一下大家的經驗

  37. 阿強 -

    如果在公司內部發送郵件,是否需要考慮網路安全性呢?這方面應該如何注意

  38. 阿德 -

    希望能看到更多關於 VBA 的應用教學,這篇開了我的眼界,感謝

留下評論

如何在 Microsoft Word 中移動圖片

如何在 Microsoft Word 中移動圖片

學習如何在 Word 中拖曳圖片、選擇文字環繞方式、將圖片與段落保持在一起或將其固定在頁面上,以及如何解決圖片無法移動的問題。

如何在 Excel 中插入複選框:兩種簡易方法

如何在 Excel 中插入複選框:兩種簡易方法

學習如何使用儲存格內工具在 Excel 中插入複選框,使用公式計算選取項目的數量,或在舊版桌面 Excel 中新增連結的表單控制項。

如何在 Excel 中自動填充字母:從 A 到 Z 及其他

如何在 Excel 中自動填充字母:從 A 到 Z 及其他

使用填充柄公式、SEQUENCE 或可重複使用的自訂清單在 Excel 中產生 A 到 Z、小寫字母或 Z 以上的標籤。

如何在 Excel 中新增刪除線:快捷鍵和逐步指南

如何在 Excel 中新增刪除線:快捷鍵和逐步指南

學習如何在 Windows、Mac 和網頁版 Excel 中新增刪除線、設定儲存格部分格式以及刪除線條而不刪除其值。

什麼是 Microsoft Access?它的資料庫工具是如何運作的?

什麼是 Microsoft Access?它的資料庫工具是如何運作的?

Microsoft Access 是一款 Windows 資料庫應用程序,用於儲存相關記錄、建立查詢、建立資料輸入表單和產生報表。了解它的工作原理以及適用場景。

如何在 Word 2010 中變更網格線高度和寬度

如何在 Word 2010 中變更網格線高度和寬度

了解如何在 Word 2010 中調整網格線高度和寬度、變更可見線頻率以及設定底層水平和垂直繪圖網格間距。

Office Outlook 2010 匯入和匯出:使用 PST 檔案移動數據

Office Outlook 2010 匯入和匯出:使用 PST 檔案移動數據

了解如何將 PST 檔案匯入 Outlook 2010 或匯出郵件、聯絡人、行事曆和任務。按照正確的選單操作,避免遺漏資料夾或重複文件。

使用 Nucleus Kernel 還原 Outlook PST 密碼

使用 Nucleus Kernel 還原 Outlook PST 密碼

使用 Kernel 的目前步驟還原忘記的 Outlook PST 密碼,包括如何識別正確的檔案、進行備份以及檢查工具的限制。

如何在 PowerPoint 幻燈片中插入網頁鏈接

如何在 PowerPoint 幻燈片中插入網頁鏈接

使用 LiveWeb 外掛程式將網站放置在 PowerPoint 投影片上,設定其大小和刷新行為,並在簡報前檢查相容性。

如何在 Word 2010 中變更預設字體和正文樣式

如何在 Word 2010 中變更預設字體和正文樣式

在 Word 2010 中設定預設字體、字號和文字效果,將選擇儲存到 Normal.dotm,然後修改 Normal 樣式以用於以後的文件。