【问题标题】:Outlook mail body is blankOutlook 邮件正文为空白
【发布时间】:2012-06-21 17:06:23
【问题描述】:

我有以下要发送的电子邮件,其中包含我的 Excel 工作表中的一系列单元格。

发送的电子邮件带有正确的主题和抄送。

该单元格范围 (A:B) 中有数据,但我无法在正文中获取任何内容。它保持空白。

Sub SendEmail()

SendEmail Macro

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

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

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

On Error Resume Next
With OutMail
    .To = Sheets("Test1").Range("F2").Value
    .CC = Sheets("Test1").Range("F3").Value
    .BCC = ""
    .Subject = Sheets("Test1").Range("E1").Text
    .Body = Sheets("Test1").Range("A:B")
    .Send
End With
On Error GoTo 0

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

Set OutMail = Nothing
Set OutApp = Nothing

End Sub

【问题讨论】:

  • 你的意思是主题保持空白,还是正文?
  • 好的。你想把范围放到身体里吗?既然您使用的是 Ron de Bruin 的代码,为什么不也使用他的 RangeToHTML 代码呢?

标签: excel vba


【解决方案1】:

您的错误捕获隐藏了错误:13 - Type Mismatch

你必须通过循环遍历值来构造.Body

下面是循环代码:

Dim I As Long
Dim LastRowColA As Long
Dim BodyString As String

BodyString = ""
LastRowColA = Sheets("Test1").Range("A65536").End(xlUp).Row
For I = 1 To LastRowColA
    BodyString = BodyString & Sheets("Test1").Range("A" & I).Value & vbTab & Sheets("Test1").Range("B" & I).Value & vbCrLf
Next I
.Body = BodyString ' instead of = Sheets("Test1").Range("A:B")

【讨论】:

  • A 列的最后一行:LastRowColA = Range("A65536").End(xlUp).Row,然后循环:BodyString=BodyString & Range("A" & Loop).value & vbTab & Range("B" & Loop).value & vbCrLf
  • 对不起,我无法让它在我的代码中工作,我认为它只是格式化。我需要把 LastRowColA = Range("A65536").End(xlUp).Row, 然后剩下的?
  • 我正在稍微改变一下。如何从excel中添加C列?我试过 Sheets("Borrow Rates").Range("C" & I).Value & vbCrLf 但它的格式不正确
  • vbTab 分隔列,vbCrLf 告诉它换行。
  • 天啊,我认为情况正好相反。谢谢
【解决方案2】:

尝试改变

Sheets("Test1").Range("E1").Text 

Sheets("Test1").Range("E1").Value

【讨论】: