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

如何修改VBA代码将Excel表格以纯文本粘贴到Outlook邮件正文

将Excel单元格区域转为纯文本插入Outlook邮件正文

现有VBA代码通过HTML格式将Excel表格粘贴到Outlook邮件,但HTML格式导致邮件读取引擎异常。需要修改代码,把指定单元格区域转为纯文本插入邮件正文,而非HTML格式。

以下是适配后的完整代码:

Sub Auto_Send_Data()
    ThisWorkbook.Sheets("Sample Tab").Select
    Range("B4:B31").Select
    Selection.Copy
    ThisWorkbook.Sheets("Other Tab").Select
    Range("B1").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

    Dim rng As Range
    Dim OutApp As Object
    Dim OutMail As Object

    Set rng = Nothing
    ' 指定要使用的单元格区域(仅可见单元格)
    Set rng = Sheets("Other Tab").Range("A1:B30").SpecialCells(xlCellTypeVisible)

    If rng Is Nothing Then
        MsgBox "所选内容不是单元格区域,或工作表受保护。" & _
               vbNewLine & "请修正后重试。", vbOKOnly
        Exit Sub
    End If

    With Application
        .EnableEvents = False
        .ScreenUpdating = False
    End With

    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)

    With OutMail
        .To = ThisWorkbook.Sheets("Other Tab").Range("F1").Value
        .CC = ""
        .BCC = ""
        .Subject = ThisWorkbook.Sheets("Other Tab").Range("F2").Value
        ' 使用纯文本正文,调用RangeToPlainText函数转换区域
        .Body = RangeToPlainText(rng)
        ' 如需预览邮件,可替换.Send为.Display
        .Send
    End With
    On Error GoTo 0

    With Application
        .EnableEvents = True
        .ScreenUpdating = True
    End With

    Set OutMail = Nothing
    Set OutApp = Nothing
End Sub

Function RangeToPlainText(rng As Range) As String
    Dim row As Range
    Dim cell As Range
    Dim rowText As String
    Dim plainText As String
    Dim colDelimiter As String
    Dim rowDelimiter As String

    ' 设置列分隔符(可按需调整,比如制表符vbTab或空格)
    colDelimiter = vbTab
    ' 设置行分隔符
    rowDelimiter = vbNewLine

    ' 遍历区域的每一行
    For Each row In rng.Rows
        rowText = ""
        ' 遍历当前行的每个单元格
        For Each cell In row.Cells
            ' 拼接单元格内容与列分隔符
            rowText = rowText & cell.Value & colDelimiter
        Next cell
        ' 移除行尾多余的列分隔符,添加行分隔符
        plainText = plainText & Left(rowText, Len(rowText) - Len(colDelimiter)) & rowDelimiter
    Next row

    ' 移除最后一行多余的行分隔符
    RangeToPlainText = Left(plainText, Len(plainText) - Len(rowDelimiter))
End Function

修改说明

  • 替换原RangetoHTML函数为RangeToPlainText:该函数遍历目标单元格区域,用制表符(可自定义)分隔同一行的单元格,用换行符分隔不同行,生成规整的纯文本内容。
  • 邮件正文属性从.HTMLBody改为.Body:直接使用Outlook的纯文本正文模式,避免HTML格式带来的兼容问题。
  • 自定义分隔符:可根据需求修改colDelimiter的值,比如换成多个空格" ",让列内容对齐更直观。

内容的提问来源于stack exchange,提问作者tjdubz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 08:00:54