如何在Outlook VBA中使用WordEditor编辑现有的MailItem?

时间:2013-10-22 06:16:39

标签: vba email ms-word outlook rtf

所以我想在之后编辑我收到的邮件以添加链接。如果收到的电子邮件是纯文本或HTML,我刚刚编辑了相应的msg.Body或msg.HTMLBody。但是,对于Rich Text,直接编辑RTFBody似乎相当复杂并且不断使我的Outlook崩溃。

我可以编辑Rich Text邮件的HTMLBody,但它会将整个邮件转换为HTML,这会使其更改外观并且无法很好地处理嵌入式附件。

MSDN讨论了MailItem.GetInspector,它返回WordEditor并允许更简单的编辑文档的方式。问题是,我发现的所有例子都是创建新邮件,而不是现有编辑。以下代码:

        Set objInsp = itm.GetInspector
        Set objDoc = objInsp.WordEditor
        objDoc.Characters(1).InsertBefore "string"

生成以下错误:运行时错误“4605”,此方法或属性不可用,因为文档已被锁定以进行编辑

有没有人知道解锁邮件项目以便进行编辑的方法,或者是一种编辑RTFBody的方法?我试图将objDoc.ProtectionType设置为允许写入的东西,但它也说我无法更改文档。

1 个答案:

答案 0 :(得分:2)

我遇到了完全相同的问题(Outlook VBA: Replace inline object with text)。 正如在my comment中发布的(在进一步测试后很快将被编辑为更精美的版本),您必须在修改内容之前使用objDoc.UnProtect。 我实际上已经使用了

'On Error Resume Next   ' This will prevent the error message... risky!
Dim odProt As Integer
odProt = objDoc.ProtectionType
If (odProt <> wdNoProtection) Then
    Debug.Print "Document is protected with type " & odProt & ", unprotecting temporarily"
    objDoc.UnProtect
End If
' ... Write your code
If (odProt <> wdNoProtection) Then
    Debug.Print "Restoring protection"
    objDoc.Protect (odProt)
End If
objMsg.Display
objMsg.Save

我不确定最后两行是否最好,但它对我有用。

请注意,使用On Error Resume Next可以防止出现错误消息,并且您可能会发现没有明显的原因,您的任何版本都没有任何效果。