Background:
My work location has a default email format of RichText.
Many people are adding images to their emails.
RichText emails with images are much larger than HTML emails with images.
I can manually open, edit, changed format to HTML, and save to greatly reduce the size of the email. The formatting is maintained during conversion.
However, when I use VBA to open the mail item, change the format and save, the email is not converted.
How can I use vba to change a set of Richtext emails into properly formatted html emails, achieving the same results as manually editing and saving using the Ribbon?
Here is my sample code below, and I can see when I run the code that this line:
myMailItem.BodyFormat = olFormatHTML
is not converting in the same way that the Ribbon is converting.
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
I tried manipulating the Ribbon from inside VBA, but I have not been able to figure out how to call the Ribbon element
(Format Text/Format/HTML).
Any suggestions are appreciated.
Thanks to Niton here is my working final solution.
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
See Question&Answers more detail:
os