将Excel单元格区域复制到Outlook邮件正文返回字符串True如何解决
问题根因
- 原代码中
xRg.PasteSpecial是操作方法,执行成功会返回布尔值True,你将该返回值直接拼接进纯文本格式的邮件正文.Body属性中,自然只会显示True字符串,且纯文本正文本身不支持表格、颜色等富格式。 - 直接拼接单元格内容的方式无法保留Excel自带的样式,需要借助富文本编辑接口实现带格式粘贴。
修改后的完整代码
Sub Send_Email() ' 发送带格式订单表格到指定邮箱 Dim xRg As Range Dim xMailOut As Object ' Outlook.MailItem Dim xOutApp As Object ' Outlook.Application Dim xWordDoc As Object ' Word.Document Dim orderTime As String Dim orderDate As String Dim orderTimeDateFinal As String ' 生成订单时间标题 orderDate = Format(Date, "MM-DD-YY") orderTime = Format(Time, "hh-nn AM/PM") orderTimeDateFinal = orderTime & " : " & orderDate ' 定义要复制的Excel区域 Set xRg = Range("A4:V50") If xRg Is Nothing Then Exit Sub xRg.Copy Application.ScreenUpdating = False ' 初始化Outlook对象(后期绑定,无需提前引用库) Set xOutApp = CreateObject("Outlook.Application") Set xMailOut = xOutApp.CreateItem(0) ' 0对应olMailItem常量 With xMailOut .Subject = "CEM Tooling Order " & orderTimeDateFinal .Importance = 2 ' 2对应olImportanceHigh常量 .To = "joey@cuttingedgemanuf.com" .Display ' 必须先渲染邮件窗口才能获取编辑接口,后台发送可注释后改.Send ' 获取邮件正文的Word编辑接口 Set xWordDoc = .GetInspector.WordEditor ' 写入开头提示文本 xWordDoc.Range(0, 0).Text = "请根据插入的Excel内容下单:" & vbCrLf ' 光标移动到正文末尾,粘贴带格式的Excel区域 xWordDoc.Range(xWordDoc.Content.End - 1).Paste ' 如需自动发送,取消下方注释即可 '.Send End With ' 释放对象 Set xWordDoc = Nothing Set xMailOut = Nothing Set xOutApp = Nothing Application.ScreenUpdating = True ' 清空剪贴板 Application.CutCopyMode = False End Sub
代码说明
- 改用Outlook内置的WordEditor富文本编辑接口操作正文,粘贴效果和手动复制粘贴完全一致,可保留单元格颜色、边框、数值格式等所有样式。
- 采用后期绑定方式调用Outlook、Word对象,无需提前在VBA编辑器中添加对应类型库引用,兼容性更强。
- 移除了原代码中不合理的错误忽略语句
On Error Resume Next,方便调试时定位问题。
内容的提问来源于stack exchange,提问作者Joe Fisher
相关产品推荐
相关产品推荐

