2017-03-09 260 views
1

我有一个Excel电子表格由其他人通过计划任务发送电子邮件到组,或者至少已经习惯了。它最近停止了工作。我现在没有时间重建他的整个Rube Goldberg/Wile E. Coyote系统,所以我试图修复它。VBA Excel创建Outlook电子邮件主题和正文空白

在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 = "[email protected]" 
    .CC = "" 
    .BCC = "" 
    .Subject = Sheets("Weight").Range("A1") 
    .HTMLBody = Convert.ToString(rng) 
    .Send 
End With 

每当我看到那么多的“上错误继续下一步”在我的东西砂砾我的牙齿。

发生了什么是它“工作”,但它发送的电子邮件是空白的。在调试中,我可以看到主题内容和正文内容都存在并具有值。我重写它是

OutMail.To = "[email protected]" 
    OutMail.CC = "" 
    OutMail.BCC = "" 
    OutMail.Subject = Sheets("Weight").Range("A1") 
    OutMail.HTMLBody = Convert.ToString(rng) 
    OutMail.Send 

和发送扔了一个调试点,并检查发件的性质和主体和htmlbody具有值。我找不到为什么发送后他们是空白的。

+0

在'.Send'前添加'.Save' – Jordan

+0

不要依赖该范围的默认属性 - 只需指定您想要的属性:'OutMail.Subject = Sheets(“Weight”)。Range(“A1” ).Value'和'OutMail.HTMLBody = rng.Value'或'OutMail.HTMLBody = rng.Text' –

+0

奇怪的部分(对我来说)是完全相同的代码在50个其他电子表格中使用,并且工作正常那些。 –

回答

1

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

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

您也可以尝试Text属性为HTMLBody

OutMail.HTMLBody = rng.Text 

然后你可以相信,你正在分配String的邮件性质是什么,预计。

+0

令人难以置信的是,出于某种原因,在那张电子表格上,对于那么少量的文本,它需要.Value,而其他更复杂的文件 –

相关问题