在日常工作中,將報表或表單寄送給主管、客戶或團隊成員是常見流程。若每次都需手動開啟 Outlook、附加檔案、輸入收件人與主旨,不僅耗時,也容易出錯。透過 VBA,我們可以建立一個「一鍵寄送」功能,自動將指定的 Excel 或 PDF 檔案透過 Outlook 寄出,大幅提升效率與準確性。
功能概述
這段 VBA 程式碼可實現以下功能:
- 自動建立 Outlook 郵件物件
- 附加指定路徑的 Excel 或 PDF 檔案
- 自動填入收件人、主旨與內文
- 開啟郵件草稿供使用者確認後寄出(或直接寄出)
VBA 程式碼範例
Sub SendFileByEmail()
Dim OutlookApp As Object
Dim OutlookMail As Object
Dim FilePath As String
Dim Recipient As String
Dim SubjectLine As String
Dim BodyText As String
' 設定要寄送的檔案路徑(可為 Excel 或 PDF)
FilePath = ThisWorkbook.Path & "\報表.pdf" ' ← 可改為 .xlsx
' 設定收件人、主旨與內文
Recipient = "recipient@example.com"
SubjectLine = "本週報表已完成,請查收"
BodyText = "您好,附件為本週報表,請查閱。如有問題請回覆。"
' 建立 Outlook 郵件物件
Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookMail = OutlookApp.CreateItem(0)
With OutlookMail
.To = Recipient
.Subject = SubjectLine
.Body = BodyText
.Attachments.Add FilePath
.Display ' ← 若改為 .Send 則直接寄出
End With
MsgBox "郵件已建立,請確認後寄出", vbInformation
End Sub
程式碼詳細解說(初學者導向)
這段程式碼的目的是將指定檔案(Excel 或 PDF)透過 Outlook 建立郵件並附加寄送。以下是逐段說明:首先,我們宣告了幾個變數(需自行設定,或是擴充功能來優化,目前以基礎版來教學):
OutlookApp
是 Outlook 應用程式物件。OutlookMail
是郵件物件。FilePath
是要附加的檔案完整路徑。Recipient
是收件人 Email。SubjectLine
是郵件主旨。BodyText
是郵件內文。
接著設定 FilePath
,這裡以目前工作簿所在資料夾的「報表.pdf」為例。你也可以改為 .xlsx
或其他檔案。
然後設定收件人、主旨與內文。這些內容可依實際需求修改,也可改為由使用者輸入。
使用 CreateObject("Outlook.Application")
建立 Outlook 應用程式物件,並使用 CreateItem(0)
建立一封新郵件。
在 With OutlookMail
區塊中:
.To
指定收件人。.Subject
指定主旨。.Body
指定內文。.Attachments.Add FilePath
附加檔案。.Display
表示開啟郵件草稿供使用者確認。若改為.Send
則會直接寄出。- 最後使用
MsgBox
提示使用者郵件已建立。
操作步驟與使用方式
- 將程式碼貼入 Excel 的模組中(例如 Module1)
- 確保 Outlook 已安裝且開啟
- 執行
SendFileByEmail
程式 - 程式會自動建立郵件草稿並附加檔案,使用者可確認後寄出
應用場景與延伸建議
- 每週報表自動寄送給主管
- 客戶資料表單自動寄出
- 教學作業或成績單批次寄送
延伸功能建議:
- 加入多位收件人(使用 .CC 或 .BCC)
- 自動根據檔案名稱判斷寄送對象
- 搭配 PDF 匯出功能,先匯出再寄送
- 加入錯誤處理(檔案不存在、Outlook 未開啟等)
常見問題 FAQ
Q1:是否可以直接寄出而不顯示草稿?
可以將 .Display
改為 .Send
,但建議先測試確認內容無誤。
Q2:是否可以寄送多個附件?
可以使用多次 .Attachments.Add
加入多個檔案。
Q3:是否支援 Gmail 或其他郵件系統?
此程式碼僅支援 Outlook,若需使用 Gmail,需透過 CDO 或 API 寫法,較為進階。
結語與延伸閱讀
這段 VBA 程式碼提供了高效率的「一鍵寄送 Excel 或 PDF 檔案」功能,適合用於報表傳送、文件審核與教學應用。後續你可以加入自動命名、批次寄送、收件人清單等模組,打造完整的郵件自動化工具。
下一篇將介紹如何「一鍵清理 Excel 空白列與欄位」,敬請期待【VBA 自動化教學】第 5 篇!