如何在将邮件格式更改为html时获取UI行为?

时间:2014-12-04 21:57:42

标签: outlook-vba

使用Outlook VBA从纯文本更改回复邮件的格式时的行为与使用格式文本/格式/ HTML菜单时的行为不同。

我的原始外发邮件,在点击“回复”按钮后,如下所示:

enter image description here

如果我然后单击HTML按钮,它将保持完全相同exactly same

除了将格式更改为HTML之后,我可以更改字体,大小等。

但是,如果我改为使用

更改宏中的格式
...BodyFormat = olFormatHTML

(见底部的完整代码)然后

  • 前导空行被删除
  • 邮件标题被删除
  • 字体更改为Times New Roman 10

enter image description here

有没有办法获得UI行为?

宏体如下:

Sub ChangeToTextStyle()
Dim objItem As Object
Dim objMail As MailItem
On Error Resume Next

Set objItem = Application.ActiveInspector.CurrentItem
If Not objItem Is Nothing Then
    If objItem.Class = olMail Then
        Set objMail = objItem
        objMail.BodyFormat = olFormatHTML
    End If
End If
End Sub

更新

关注Eugene' answer之后的小问题:

在更改格式之前插入objMail.Save会保留标题和空白行,但字体会更改为Times New Roman而不是Lucida Console,这是我在撰写和阅读纯文本邮件的选项中设置的。原始文本显示在10pt,光标位于12pt。我如何能 - 将邮件中的所有文本的字体更改为Lucida Console 9.5pt? - 将光标处的颜色更改为wdDarkRed

4 个答案:

答案 0 :(得分:1)

您似乎需要保存邮件项并关闭检查器窗口以将更改应用于UI。 Outlook不会立即反映UI中的更改。有时您需要重新打开消息。

答案 1 :(得分:1)

尝试ExecuteMSO - http://msdn.microsoft.com/en-us/library/office/ff862419(v=office.15).aspx

"适用于内置按钮的控件......"

Sub ChangeToTextStyleHTML()
Dim objItem As Object
Dim objMail As mailitem
On Error Resume Next

Set objItem = Application.ActiveInspector.currentItem
If Not objItem Is Nothing Then
    If objItem.Class = olMail Then
        ActiveInspector.CommandBars.ExecuteMso ("MessageFormatHtml")
    End If
End If
End Sub

还有其他方法,但是当您为快速访问工具栏或功能区添加内置按钮时将鼠标悬停在选区上时,您可以看到MessageFormatHtml(IdMso)作为文本的最后一位。

答案 2 :(得分:0)

否则,您只需将代码替换为以下代码即可将电子邮件设置为html格式:

Sub ChangeToTextStyle()
Dim objItem As Object

Dim objMail As MailItem
On Error Resume Next

Set objItem = Application.ActiveInspector.CurrentItem
If Not objItem Is Nothing Then
    If objItem.Class = olMail Then
        Set objMail = objItem
        .HTMLBody = .HTMLBody
    End If
End If
End Sub

这对我有用。

答案 3 :(得分:0)

以下代码适用于我:

objItem.BodyFormat = olFormatHTML