【问题标题】:Copy multiple columns, keeping formatting, from Excel to Outlook mail复制多列,保持格式,从 Excel 到 Outlook 邮件
【发布时间】:2018-12-17 02:55:46
【问题描述】:

我想将邮件发送给 Col A 中的每个收件人(单独的邮件),Col B 中的主题,以及 Excel 中从 Col D 到 Col I 的数据作为邮件正文。

我找到了以下代码,该代码适用于电子邮件地址和主题。

在正文中,它仅从一列(Col D)中挑选数据。如何使用格式更新正文中的范围 D2:I2?

Option Explicit

Sub Sample()
    Dim OutApp As Object, OutMail As Object
    Dim ws As Worksheet
    Dim i As Long, lRow As Long

    Set OutApp = CreateObject("Outlook.Application")

    Set ws = ThisWorkbook.Sheets("Sheet1")

    With ws
        lRow = .Range("A" & .Rows.Count).End(xlUp).Row

        For i = 1 To lRow
            Set OutMail = OutApp.CreateItem(0)

            With OutMail
                .To = ws.Range("B" & i).Value
                .Cc = ""
                .Subject = ws.Range("C" & i).Value
                .Body = ws.Range("D" & i).Value
                .Display

            End With
        Next i
    End With
End Sub

Excel 示例数据

【问题讨论】:

  • 带格式?您要保留什么格式?单元格边界?因为这是 D2:I2 范围内的唯一格式,如果需要,您需要将范围转换为 HTML。有一些函数可以做到这一点,但对于单一的、短线的数据来说似乎有点过分了。

标签: excel excel-2010 outlook-2010 vba


【解决方案1】:

使用RangeToString 从-How can I convert a range to a string (VBA)? 获取.Body 的字符串

Function RangeToString(ByVal myRange as Range) as String
    RangeToString = ""
    If Not myRange Is Nothing Then
        Dim myCell as Range
        For Each myCell in myRange
            RangeToString = RangeToString & "," & myCell.Value
        Next myCell
        'Remove extra comma
        RangeToString = Right(RangeToString, Len(RangeToString) - 1)
    End If
End Function

并像这样使用它:

.Body = RangeToString(ws.Range(ws.Cells(2,"D"),ws.Cells(i, "I")))

【讨论】:

  • 好一个Vityata!
  • @Vityata,谢谢。我根据建议更新了代码并进行了测试,它工作正常,但我需要边界不以逗号分隔的数据。我需要在代码中进行更改以获取格式。
  • @Mallur - 将RangeToString 函数中的逗号(只有一个逗号)替换为其他内容。例如,一个空的空间就可以了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-27
相关资源
最近更新 更多