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

问题描述 投票:0回答:1

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

我可以编辑富文本邮件的 HTMLBody,但它随后会将整个邮件转换为 HTML,这会使其外观发生变化并且无法很好地处理嵌入的附件。

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

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

生成以下错误:

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

有谁知道一种解锁邮件项目以允许编辑的方法,或者一种编辑不会崩溃的 RTFBody 的方法?我尝试将 objDoc.ProtectionType 设置为允许写入的内容,但它也说我无法更改文档。

vba email ms-word outlook rtf
1个回答
2
投票

我面临着完全相同的问题(Outlook VBA:用文本替换内联对象)。 正如我的评论中所发布的(经过进一步测试,很快将被编辑为更精美的版本),您必须在修改内容之前使用

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
将防止出现错误消息,并且您可能会发现您的所有版本都没有任何明显的原因。

© www.soinside.com 2019 - 2024. All rights reserved.