如何使用vba从excel转发具有新值的现有Outlook邮件

时间:2015-03-18 11:56:58

标签: vba excel-vba outlook outlook-vba excel

我现有的促销邮件包含HTML格式,颜色,项目符号等。我想使用VBA将此邮件转发给新的收件人。

我有一个包含以下正文的现有邮件:


你好XXnameXX,

存在一些图片&很多彩色格式。

感谢您注册我们的网站。您的用户ID是XXuseridXX。

谢谢。


此处XXnameXX应替换为FirstName,XXuseridXX替换为userID

我可以从Outlook转发所选邮件。但它没有使用所有图像/格式/项目符号转发它。在收到结束时,它显示一个完整的不同邮件与链接和所有。

Sub ForwardEmail()
 Dim oApp As Outlook.Application
 Dim objFolder As Outlook.MAPIFolder
 Set oApp = New Outlook.Application
 Set objNS = Application.GetNamespace("MAPI")
 Set objFolder = objNS.GetDefaultFolder(olFolderInbox)
 Dim oEmail As Outlook.MailItem

 For Each objitem In Application.ActiveExplorer.Selection
     If objFolder.DefaultItemType = olMailItem Then
         If objitem.Class = olMail Then

             Set myforward = objitem.Forward

             Set objRecip = myforward.Recipients.Add("firstlastname@gmail.com")

             myforward.HTMLBody = Replace(myforward.HTMLBody, "xxnamexx", "FirstName", 1, 1)

             myforward.Send

         End If
     End If
 Next
End Sub

1 个答案:

答案 0 :(得分:1)

首先,不要在单行代码中使用多个点。我建议打破调用链并在不同的代码行上声明每个属性或方法调用。

If objFolder.DefaultItemType = olMailItem Then

每次都不需要在循环中检出文件夹的属性。我建议将这个条件移出循环。

objitem.BodyFormat = olFormatHTML

为什么需要设置BodyFormat属性?在设置属性之前是否有机会检查值?

myforward.Body = Replace(myforward.Body, "xxnamexx", "FirstName", 1, 1)

Body属性是表示Outlook项目的明文正文的字符串。如果要保留格式,则需要使用HTMLBody属性。您可以在Chapter 17: Working with Item Bodies中了解有关使用项目正文的所有可能方式的更多信息。

无论如何,我没有看到您在邮件正文中添加图片和其他信息的代码。