【问题标题】:How to edit existing MailItem using WordEditor in Outlook VBA?如何在 Outlook VBA 中使用 WordEditor 编辑现有 MailItem?
【发布时间】:2013-10-30 21:05:16
【问题描述】:

所以我想在之后编辑收到的邮件以添加链接。如果以纯文本或 HTML 格式收到电子邮件,我刚刚编辑了相应的 msg.Body 或 msg.HTMLBody。然而,对于富文本,直接编辑 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】:

我遇到了完全相同的问题 (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 将防止出现错误消息,并且您可能会发现您的任何版本都没有任何效果,没有明显的原因。

【讨论】:

  • 我实际上在 objDoc.Protect 部分得到了运行时错误 4605,说该命令不可用。但出于我需要的编辑目的,让文档不受保护似乎很好。
  • @RipperDoc - 感谢您的反馈。在以下 Outlook 会话中,您的objDoc 可能是Protected。仅在特定情况下,您可能会发现您的情况不方便,具体取决于您要在宏中执行的操作(而且似乎不是您的情况)。
猜你喜欢
  • 1970-01-01
  • 2016-12-19
  • 2015-12-06
  • 2021-07-20
  • 2014-07-23
  • 2015-12-11
  • 2014-10-12
  • 1970-01-01
  • 2017-08-16
相关资源
最近更新 更多