2014-03-06 372 views
3

我正在尝试使用VBA for Excel自动化一些电子邮件。到目前为止,一切都很好,除了试图在电子邮件中保留我的签名外。将签名插入到Excel VBA的Outlook电子邮件中

一旦您告诉VBA创建新电子邮件,它将已经包含您的默认签名。如果您尝试Outmail.Display,可以看到这一点。但是,如果您覆盖.HTMLBody属性,它将被删除。

我的简单尝试是将.HTMLBody的内容保存为signature(字符串),然后将其重新分配至.HTMLBody以进行测试。然而,由此产生的电子邮件将无效签名。

代码复制并重新插入签名:

Dim myOlApp As Outlook.Application 
Dim MyItem As Outlook.MailItem 

Dim signature As String 


Set myOlApp = CreateObject("Outlook.Application") 
Set Outmail = myOlApp.CreateItem(0) 

signature = Outmail.HTMLBody 
Outmail.HTMLBody = signature 

Outmail.Display 

代码以证明签名是自动插入:

Dim myOlApp As Outlook.Application 
Dim MyItem As Outlook.MailItem 
Set myOlApp = CreateObject("Outlook.Application") 
Set Outmail = myOlApp.CreateItem(0) 
Outmail.Display 

编辑:我试着用.Body更换.HTMLBody。这样的作品,但很明显,取出签名

编辑2的HTML格式:代码工作我朋友的电脑上,但不能在我的

回答

1

解决。简单地重新启动Outlook解决了它。

+1

似乎是Outlook/Excel连接中的一个错误我猜。即使有上述的修复,我有时会得到错误。决赛的解决方案只是有Outmail.Display几次(即每次签名更改/插入之前和之后等)。 – msmf14

-1

剪切签名的html源代码(例如在编辑器或mozilla源视图中),然后将其复制到单元格中。那么你可以将单元格的值添加到你的.htmlbody中,并且将是完美的。所有其他的解决方案都很糟糕,我试了一下:)

+1

我一直使用我的成功,因为我使用Outmail每天发送相同的电子邮件(和其他)。多次显示,尽管朋友不需要Outmail.Display就可以工作。 – msmf14

0

我解决了这个问题,与这一招:

Set myOutlook = CreateObject("Outlook.Application") 
Set tempMail = myOutlook.CreateItem(olMailItem) 

With tempMail 
    ' Trick to preserve Outlook default signature 
    ' MailItem need to be displayed to be "fully created" as object (maybe VBA bug) 

    .Display 
    HTMLBody = .HTMLBody 
    .Close olDiscard 

    ' --- Trick to split HTMLBody into Head and Signature --- 
    ' Search for the position of the tag before signature 
    bodyTag = "<body" 
    PosBody = InStr(HTMLBody, bodyTag) 
    pTag = "<o:p>" 
    PosSignature = InStr(PosBody, HTMLBody, pTag) 

    Head = Left(HTMLBody, PosSignature - 1) 
    Signature = Right(HTMLBody, Len(HTMLBody) - PosSignature + 1) 

End With 

然后,你可以简单地把头部和签名之间的HTML文本:

Set myOutlook = CreateObject("Outlook.Application") 
Set myMail = myOutlook.CreateItem(olMailItem) 

With myMail 
    .To = Recipients 
    .Subject = Subject 
    .CC = CC 
    .HTMLBody = Head & "Here the HTML text of your mail" & Signature 
End With 

我认为这是一种VBA错误:如果你不使用.Display方法,MailItem对象不是“完全”创建的。

尝试把一个brakepoint,看看前后。显示方法行之后?mymail.HTMLbody值上立即窗口(Ctrl + G)....

您还可以获取在相同的简单扩展mymail对象当地人窗口!

0

您可以从Signatures文件夹中读取签名文件(请记住文件夹名称已本地化)并将其与邮件正文合并(您不能简单地连接两个格式良好的HTML文档并取回有效的HTML文档) 。您还需要小心签名样式和图像 - 它们必须单独处理。

您还可以显示消息(Outlook在消息显示时使用签名填充未修改的消息主体),然后读取HTMLBody属性并关闭检查器(闪烁是不可避免的)。如果您想要显示消息,请首先显示它,以便通过Outlook插入签名,然后添加您的数据(需要插入,而不是连接)。

如果使用Redemption是一个选项,它将公开RDOSignature对象。您可以使用其ApplyTo方法在任何消息中插入任何签名。

set Session = CreateObject("Redemption.RDOSession") 
Session.MAPIOBJECT = Application.Session.MAPIOBJECT 
set Drafts = Session.GetDefaultFolder(olFolderDrafts) 
set Msg = Drafts.Items.Add 
Msg.To = "[email protected]" 
Msg.Subject = "testing signatures" 
Msg.HTMLBody = "<html><body>some <b>bold</b> message text<br></body></html>" 
set Account = Session.Accounts.GetOrder(2).Item(1) 'first mail account 
if Not (Account Is Nothing) Then 
    set Signature = Account.NewMessageSignature 
    if Not (Signature Is Nothing) Then 
    Signature.ApplyTo Msg, false 'apply at the bottom 
    End If 
End If 
Msg.Display 
相关问题