使用VBA发邮件时如何保留Excel文本框原有格式插入邮件正文
问题原因
你当前代码运行后丢失文本框格式有两个核心原因:
- 直接提取文本框的
.Text属性只能拿到无格式的纯文本内容,无法携带字体、颜色、段落排版等格式信息 - 给邮件的
.Body属性赋值仅支持纯文本,即使传入带格式的内容也会被自动抹除
解决方案
推荐使用Outlook的WordEditor接口直接复制Excel文本框内容粘贴到邮件正文,该方法可以100%还原文本框的原有格式,不需要额外做格式转换,修改后的代码如下:
Sub test_email_template() ' 修正变量声明,避免前面的变量默认被声明为Variant类型 Dim name As String, email As String, subject As String, copy As String Dim OutApp As Object, OutMail As Object, wordDoc As Object name = Range("B4").Value email = Range("C4").Value subject = " Payment Summary Reports" copy = Range("D2").Value Set OutApp = CreateObject("Outlook.Application") Set OutMail = OutApp.CreateItem(0) With OutMail .to = email .cc = copy .subject = subject .display ' 必须先唤起邮件预览窗口,才能获取WordEditor对象 ' 获取邮件正文的Word编辑对象 Set wordDoc = .GetInspector.WordEditor ' 复制Excel工作表中的目标文本框 ActiveSheet.TextBoxes("TextBox 1").Copy ' 将复制的内容粘贴到邮件正文最开头 wordDoc.Range(0, 0).Paste ' 替换正文内的占位符,替换后不会破坏原有格式 wordDoc.Content.Find.Execute FindText:="Email Title", ReplaceWith:=name, Replace:=2 ' 如需直接自动发送,取消注释下一行即可 ' .Send End With ' 释放内存对象 Set wordDoc = Nothing Set OutMail = Nothing Set OutApp = Nothing MsgBox "邮件操作已完成!" End Sub
注意事项
- 该方法可以完整保留文本框内的字体样式、颜色、段落缩进、图片等所有格式
- 运行代码前需要确保Excel和Outlook都处于正常激活状态,宏权限已开启
- 如果你批量发送多封邮件,可以在外层加循环遍历B、C列的客户信息即可
原文本框格式参考

内容的提问来源于stack exchange,提问作者Lydia Jin
相关产品推荐
相关产品推荐

