Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 如何将选定的电子邮件从RichText转换为HTML格式?_Vba_Email_Outlook_Richtext - Fatal编程技术网

Vba 如何将选定的电子邮件从RichText转换为HTML格式?

Vba 如何将选定的电子邮件从RichText转换为HTML格式?,vba,email,outlook,richtext,Vba,Email,Outlook,Richtext,背景: 我的工作地点的默认电子邮件格式为RichText。 许多人在电子邮件中添加图像。 带有图像的RichText电子邮件比带有图像的HTML电子邮件大得多 我可以手动打开、编辑、将格式更改为HTML,并进行保存,以大大减少电子邮件的大小。格式在转换过程中保持不变 但是,当我使用VBA打开邮件项目、更改格式并保存时,电子邮件不会转换 如何使用vba将一组Richtext电子邮件更改为格式正确的html电子邮件,从而获得与使用功能区手动编辑和保存相同的结果 下面是我的示例代码,我运行代码时可以看

背景: 我的工作地点的默认电子邮件格式为RichText。 许多人在电子邮件中添加图像。 带有图像的RichText电子邮件比带有图像的HTML电子邮件大得多

我可以手动打开、编辑、将格式更改为HTML,并进行保存,以大大减少电子邮件的大小。格式在转换过程中保持不变

但是,当我使用VBA打开邮件项目、更改格式并保存时,电子邮件不会转换

如何使用vba将一组Richtext电子邮件更改为格式正确的html电子邮件,从而获得与使用功能区手动编辑和保存相同的结果

下面是我的示例代码,我运行代码时可以看到这行代码:

myMailItem.BodyFormat = olFormatHTML
转换的方式与功能区转换的方式不同

Public Sub myConvertHTML()

    Dim mySelectedItems As Selection
    Dim myMailItem As MailItem
    Dim myRichText As String
    Dim myHtmlText As String


    ' Set reference to the Selection.
    Set mySelectedItems = ActiveExplorer.Selection

    ' Loop through each item in the selection.
    For Each myMailItem In mySelectedItems

        'if the current format is RichText proceed
        If myMailItem.BodyFormat = olFormatRichText Then

            myMailItem.Display

            'this line does not convert the RichText to Html properly
            'it seems to convert the images into an attached file ATT#### that is an ole object
            'instead of converting the image and using it in html format
            'when using the Ribbon and changing the format to HTML,
            'the email is converted and formatting maintained
            myMailItem.BodyFormat = olFormatHTML

            myMailItem.Save
            myMailItem.Close olSave


        Else
            MsgBox "Already in RichText Format: " & myMailItem.Subject, vbInformation

        End If

    Next

    MsgBox "All Done. Email converted to HTML.", vbOKOnly, "Message"

    Set mySelectedItems = Nothing
    Set myMailItem = Nothing

End Sub
我尝试从VBA内部操纵Ribbon,但我无法找到如何调用Ribbon元素

(Format Text/Format/HTML).
如有任何建议,我们将不胜感激


感谢尼顿,这是我的最终解决方案

Public Sub myConvertHTML002()
'takes selected list of items in Outlook and converts all mailItems that are RichText into HTML Format

    Dim mySelectedObjects As Selection
    Dim myObject As Object
    Dim myMailItem As MailItem

    Dim objItem As Object

    ' Set reference to the Selection.
    Set mySelectedObjects = ActiveExplorer.Selection

    ' Loop through each item in the selection.
    For Each myObject In mySelectedObjects

        If myObject.Class = olMail Then

            Set myMailItem = myObject

            'if the current format is RichText proceed
            If myMailItem.BodyFormat = olFormatRichText Then

                'have to display the email so we can use the command bars
                myMailItem.Display

                'special code because we can't change the format of the item from within the item
                'we have to use the ActiveInspector
                On Error Resume Next
                Set objItem = ActiveInspector.CurrentItem
                On Error GoTo 0

                If Not objItem Is Nothing Then
                    If objItem.Class = olMail Then
                        ActiveInspector.CommandBars.ExecuteMso ("EditMessage")
                        ActiveInspector.CommandBars.ExecuteMso ("MessageFormatHtml")
                    End If
                End If

                myMailItem.Close olSave

            Else

                'MsgBox "Already in RichText Format: " & myMailItem.Subject, vbInformation

            End If

        End If

    Next

    MsgBox "All Done. Email converted to HTML.", vbOKOnly, "Message"

    Set mySelectedItems = Nothing
    Set myMailItem = Nothing

End Sub

您可以使用ExecuteMso单击按钮

“适用于内置按钮的控件…”


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

重复,非常感谢您共享最终解决方案!它大大缩小了我的邮箱。
Sub ChangeToHTML()
Dim objItem As Object
Dim objMail As mailitem

On Error Resume Next
Set objItem = ActiveInspector.currentItem
On Error GoTo 0

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

End Sub