如何在 VBA 中操作 HTML 範本與 CSS,
將枯燥的帳務通知升級為專業的報表。
Frontend Engineering & Automation
傳統系統自動寄送的純文字郵件,缺乏結構,數據擠成一團,難以快速閱讀。
帳務異常或重要指標無法凸顯,容易淹沒在龐大的文字海中,導致決策延遲。
面對高階主管或外部客戶,簡陋的通知信無法展現金融機構應有的嚴謹與質感。
我們需要一個強大的 「html 寄送郵件工具」
負責撈取資料庫或 Excel 報表數據,並操控 Outlook 應用程式發送郵件。
設計郵件的基礎表格、標題與段落,取代傳統的純文字排版。
將色彩、間距與字體大小寫入標籤內,實現金融美學的視覺升級。
根據《自動化作業工具操作手冊》規範之標準動作
點選並開啟系統產出之 Excel 數據源。
輸入主旨,並選擇對應業務的 HTML 範本。
顯示寄件內容,確認名單(TO/CC)後透過 Outlook 發送。
我們在 HTML 範本中,預留特定的字串標記(如 {{VarName}}),以便 VBA 進行字串替換。
<!-- HTML 範本檔片段 -->
<div class="report-header">
<h2>自動化帳務通知</h2>
<p>報表日期:{{ReportDate}}</p>
</div>
<table>
<tr><td>總交易筆數</td><td>{{TotalCount}}</td></tr>
<tr><td>異常筆數</td><td>{{ErrorCount}}</td></tr>
</table>
透過 VBA 的 Replace 函數,將 Excel 擷取的活資料注入到 HTML 骨架中。
' 讀取 HTML 範本檔為字串
Dim htmlBody As String
htmlBody = ReadTextFile("C:\Templates\ReportTemp.html")
' 進行變數替換注入數據
htmlBody = Replace(htmlBody, "{{ReportDate}}", Date)
htmlBody = Replace(htmlBody, "{{TotalCount}}", ws.Range("B2").Value)
' 若異常大於 0,可動態注入警告的 CSS 樣式
If ws.Range("B3").Value > 0 Then
htmlBody = Replace(htmlBody, "{{ErrorCount}}", _
"<span style='color:red; font-weight:bold;'>" & ws.Range("B3").Value & "</span>")
End If
為了克服 Outlook、Gmail 等各大郵件客戶端的安全限制,我們必須放棄外部連結或 <style> 標籤,改用行內樣式 (Inline CSS)。
<style>
.title { color: #F25C54; }
</style>
<h1 class="title">標題</h1>
<h1 style="color: #F25C54; font-family: sans-serif;">
標題
</h1>
透過標準色系規範,提升報表可讀性與品牌識別。
#F25C54
主色 / 強調異常與重要指標
#F7E1D7
輔助色 / 區塊背景與表頭區隔
#E9C46A
點綴色 / 狀態標籤與重點底線
#333333
文字色 / 沉穩內文建立專業度
對於報表類郵件,傳統 <table> 仍是最穩定的佈局方式。我們運用 CSS 處理邊距、對齊與斑馬紋,引導主管的視線。
| 交易別 | 筆數 | 總金額 (TWD) | 狀態 |
|---|---|---|---|
| 自動扣款作業 | 1,245 | 8,450,000 | 成功 |
| 電文匯出排程 | 32 | 1,200,500 | 需覆核 |
| 手續費結轉 | 850 | 45,800 | 成功 |
將組裝好的完美 HTML 字串,賦予給 MailItem 的 HTMLBody 屬性。
Dim OutApp As Object, OutMail As Object
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
With OutMail
.To = "manager@example.com"
.CC = "team@example.com"
.Subject = "【系統自動化】每日帳務處理摘要 (" & Date & ")"
' 關鍵步驟:指定信件內容格式為 HTML
.HTMLBody = htmlBody
' 可選:加入夾檔
' .Attachments.Add "C:\Reports\Detail.xlsx"
.Display ' 預覽 (操作手冊步驟 4)
' .Send ' 直接寄出
End With
主旨:系統每日帳務通知
長官您好,以下為今日帳務處理結果:
自動扣款作業 筆數:1245 總金額:8450000 狀態:成功
電文匯出排程 筆數:32 總金額:1200500 狀態:異常(需覆核)
手續費結轉 筆數:850 總金額:45800 狀態:成功
請至系統查閱明細。
此為系統自動發送信件,請勿回覆。
痛點:缺乏視覺重點,數字難以快速辨識,質感低落。
長官您好,以下為今日核心帳務處理結果摘要:
| 業務項目 | 處理筆數 | 總金額 | 狀態 |
|---|---|---|---|
| 自動扣款作業 | 1,245 | $8,450,000 | 成功 |
| 電文匯出排程 | 32 | $1,200,500 | 需覆核 |
| 手續費結轉 | 850 | $45,800 | 成功 |
此為自動化工具產製之報表,如需詳情請登入後台系統。
Outlook 桌面版使用 Word 引擎渲染,不支援現代網頁佈局。請乖乖使用 <table> 進行排版。
避免使用 Base64 圖片(許多客戶端會阻擋)。建議使用外部絕對路徑 URL,並務必加上 alt 替代文字。
所有樣式寫在 style="..." 內,避免使用複雜的選擇器或假元素 (::before, ::after)。
我們撰寫 VBA 程式與 HTML 範本,不僅是為了「寄信」...
將例行性整理報表的時間趨近於零。
透過色彩美學與表格對齊,降低閱讀者的認知負擔,加速決策。
從細節處展現金融從業人員對數據品質與呈現的堅持。
感謝聆聽!
現在開始,讓你的自動化郵件不再枯燥乏味。