VBA Excel创建Outlook电子邮件主题和正文空白

时间:2017-03-09 13:41:03

标签: excel vba excel-vba email outlook

我有一个由其他人构建的Excel电子表格,它通过计划任务向组发送电子邮件,或者至少用于。它最近停止了工作。我现在没有时间重建他的整个Rube Goldberg / Wile E. Coyote系统,所以我正在努力修复它。

在其中一个Excel文档中,此代码存在

Set rng = Nothing
On Error Resume Next
Set rng = Sheets("Weight").Range("A2")
On Error GoTo 0

If rng Is Nothing Then
    MsgBox "The selection is not a range or the sheet is protected" & _
           vbNewLine & "please correct and try again.", vbOKOnly
    Exit Sub
End If

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 = "eric.lizotte@.com"
    .CC = ""
    .BCC = ""
    .Subject = Sheets("Weight").Range("A1")
    .HTMLBody = Convert.ToString(rng)
    .Send
End With

每当我看到这么多“接下来的错误恢复”时,我都会咬牙切齿。

发生的事情是它“有效”,但它发送的电子邮件是空白的。在调试中,我可以看到主题内容和正文内容都存在并具有值。我把它改写为

    OutMail.To = "eric.lizotte@.com"
    OutMail.CC = ""
    OutMail.BCC = ""
    OutMail.Subject = Sheets("Weight").Range("A1")
    OutMail.HTMLBody = Convert.ToString(rng)
    OutMail.Send

并在send上抛出一个调试点,并检查outmail的属性,主题和htmlbody有值。我无法弄清楚为什么发送后他们是空白的。

1 个答案:

答案 0 :(得分:1)

鉴于您正在自动化另一个应用程序,您可能不应该依赖于该范围的默认属性 - 只需指定您想要的属性,例如: Value

OutMail.Subject = Sheets("Weight").Range("A1").Value 
OutMail.HTMLBody = rng.Value 

您也可以尝试Text的{​​{1}}属性:

HTMLBody

然后,您可以确信您正在为邮件属性分配OutMail.HTMLBody = rng.Text ,这是它所期望的。