如何将含格式的Word文件作为邮件模板批量发送给合作伙伴?
问题原因
你当前代码中使用MSForms.DataObject.GetText(1)从剪贴板获取的是纯文本内容,Word文档里的格式、图片、表格等富文本信息全部丢失,导致收件人收到的邮件只有无格式的纯文本。
解决方案
下面提供两种可行的方法来完整保留Word模板的格式和内容:
方法1:将Word文档转为HTML后读取内容
把Word文档另存为HTML格式,直接读取HTML内容赋值给Outlook邮件的HTMLBody,这种方式能保留大部分格式和内嵌图片:
Dim filePath As String Dim htmlTempPath As String filePath = "locally stored file" & partnerName & ".docx" wordDoc.SaveAs2 filePath ' 生成临时HTML文件路径(使用系统临时文件夹) htmlTempPath = Environ("TEMP") & "\" & partnerName & "_temp.html" ' 另存为HTML格式(如果未引用Word对象库,用数值10代替wdFormatHTML) wordDoc.SaveAs2 Filename:=htmlTempPath, FileFormat:=wdFormatHTML ' 读取HTML文件内容 Dim fileSys As Object Dim htmlContent As String Set fileSys = CreateObject("Scripting.FileSystemObject") htmlContent = fileSys.OpenTextFile(htmlTempPath, 1).ReadAll wordDoc.Close Kill htmlTempPath ' 删除临时文件,避免占用空间 emailAddress = ws.Cells(i + 1, 12).Value Set outlookMail = outlookApp.CreateItem(0) With outlookMail .To = emailAddress .Subject = "FY25 Reward results for Q3 FY25: " & partnerName .HTMLBody = htmlContent .Send End With Next i
方法2:使用Outlook的WordEditor直接粘贴富文本
利用Outlook邮件内置的Word编辑器,直接从剪贴板粘贴Word的富文本内容,这种方式能100%保留原文档的格式和元素:
Dim filePath As String filePath = "locally stored file" & partnerName & ".docx" wordDoc.SaveAs2 filePath ' 复制Word文档的富文本内容到剪贴板 wordDoc.Content.Copy wordDoc.Close emailAddress = ws.Cells(i + 1, 12).Value Set outlookMail = outlookApp.CreateItem(0) With outlookMail .To = emailAddress .Subject = "FY25 Reward results for Q3 FY25: " & partnerName .Display False ' 隐藏显示邮件窗口(部分Outlook版本支持) ' 粘贴剪贴板中的富文本内容到邮件编辑器 .GetInspector.WordEditor.Content.Paste .Send End With Next i
注意事项
- 方法1中,如果Word文档包含外部链接的图片,需要确保图片路径在收件人端可访问,或者提前将图片内嵌到Word文档中。
- 方法2中,
.Display False可以避免邮件窗口弹出,如果你的Outlook版本不支持该参数,可改用Application.ScreenUpdating = False来临时关闭界面更新,发送后再恢复。 - 若代码中未引用Word对象库,需将
wdFormatHTML替换为对应的数值10。
内容的提问来源于stack exchange,提问作者Shreeuday Kasat




