如何使用HTML复制Outlook邮件正文并保留格式?
解决方案
要保留Outlook邮件的原有格式,你需要替换原代码中直接赋值OutlookMail.Body的逻辑,改用邮件的HTMLBody属性,并通过剪贴板中转实现格式保留。以下是修改后的完整代码:
Sub GetFromOutlookWithFormat() Dim OutlookApp As Outlook.Application Dim OutlookNamespace As Outlook.Namespace Dim Folder As Outlook.MAPIFolder Dim OutlookMail As Variant Dim i As Integer Dim ws As Worksheet Dim targetRange As Range ' 设置目标工作表,根据实际情况修改 Set ws = ThisWorkbook.Worksheets("Sheet1") Set OutlookApp = New Outlook.Application Set OutlookNamespace = OutlookApp.GetNamespace("MAPI") Set Folder = OutlookNamespace.Folders("XXX").Folders("XXX").Folders("XXX").Folders("XXX") i = 1 ' 遍历邮件 For Each OutlookMail In Folder.Items If OutlookMail.Subject >= ws.Range("Subj2").Value Then Set targetRange = ws.Range("DDump2").Offset(i - 1, 0) ' 清空目标单元格 targetRange.Clear ' 将邮件HTML正文复制到剪贴板 With New MSForms.DataObject .SetText OutlookMail.HTMLBody .PutInClipboard End With ' 粘贴HTML内容到单元格,保留格式 targetRange.Select ws.PasteSpecial Format:="HTML", Link:=False, DisplayAsIcon:=False i = i + 1 End If Next OutlookMail ' 释放对象 Set Folder = Nothing Set OutlookNamespace = Nothing Set OutlookApp = Nothing Set ws = Nothing Set targetRange = Nothing End Sub
关键修改说明:
- 替换
OutlookMail.Body为OutlookMail.HTMLBody:获取邮件的HTML格式内容,这是保留格式的核心。 - 使用
MSForms.DataObject将HTML内容写入剪贴板:通过剪贴板中转实现HTML格式的粘贴。 - 调用
PasteSpecial方法并指定Format:="HTML":让Excel以HTML格式解析粘贴内容,从而保留原邮件的字体、颜色、表格等格式。
注意事项:
- 需要确保VBA项目引用了
Microsoft Forms 2.0 Object Library:打开VBA编辑器 → 工具 → 引用 → 勾选该库。 - 目标工作表和单元格范围请根据实际需求调整(代码中
Sheet1、Subj2、DDump2需对应你的实际设置)。 - 如果邮件数量较多,遍历
Folder.Items可能效率较低,可考虑先对邮件进行排序或筛选优化。
内容的提问来源于stack exchange,提问作者Matt555
相关产品推荐
相关产品推荐

