首页 > 解决方案 > 如何在特定位置将 Excel 范围和文本添加到电子邮件正文?

问题描述

我想将 Excel 工作表中多个范围的数据复制到电子邮件正文。

下面是我想出的代码。

如何使范围在另一个下粘贴,以及如何在范围之后但在 Outlook 签名之前添加文本。

现在怎么样了:

在此处输入图像描述

Sub reportCostLunch()

Dim recipient(0) As Variant
recipient(0) = ""
Dim outlook As Object
Dim email As Object
Dim xInspect As Object
Dim pageEditor As Object
Dim lastRow As Long
Dim sheet, sheet1 As Worksheet
Dim SDest As String, title As String, slot As String

Set sheet = ThisWorkbook.Sheets("SHEET1")
Set sheet1 = ThisWorkbook.Sheets("SHEET2")
title = sheet.Range("D13").Value
Set outlook = CreateObject("Outlook.Application")
Set email = outlook.CreateItem(0)

With email
    SDest = ""
    For i = LBound(recipient) To UBound(recipient)
        If SDest = "" Then
            SDest = recipient(i)
        Else
            SDest = SDest & ";" & recipient(i)
        End If
    Next i
    
    .To = SDest
    .Subject = title
    .Display

    Set xInspect = email.GetInspector
    Set pageEditor = xInspect.WordEditor

    Worksheets("SHEET2").Range("C44:AF71").Copy

    pageEditor.Application.Selection.start = 1
    pageEditor.Application.Selection.End = pageEditor.Application.Selection.start
    pageEditor.Application.Selection.PasteAndFormat (wdChartPicture)
    pageEditor.Application.Selection.InsertParagraphAfter

    Worksheets("SHEET2").Range("C26:AF44").Copy

    pageEditor.Application.Selection.PasteAndFormat (wdChartPicture)
    pageEditor.Application.Selection.InsertParagraphAfter           
    .Display
    email.HTMLBody = "SOME TEXT " _
     & email.HTMLBody & " some text"
              
    Set pageEditor = Nothing
    Set xInspect = Nothing
End With

Set email = Nothing
Set outlook = Nothing
Application.CutCopyMode = False
End Sub

标签: excelvba

解决方案


在 VBA 中创建电子邮件正文。

把它放在一个变量中,包括你所有的段落和换行符。然后使用那个变量

email.HTMLBody = varEmailBody

编辑:如果你使用.HTMLBody你不能复制/粘贴任何东西。您需要在某处(在您的代码中)将 HTML 构造为文本。Ron de Bruin 有各种 Excel 到 Outlook 电子邮件方案的优秀示例。这是在 HTML 正文中邮寄 Excel 范围的方法:https ://www.rondebruin.nl/win/s1/outlook/bmail2.htm -- 您可能需要在工作表中构建一个连续的范围(可能在隐藏的表),您可以在 VBA 中作为一个范围进行处理。


推荐阅读