You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 11:39:04