Use Word Macro to Apply Formatting to Outlook Email

Last reviewed on January 3, 2014

Applies to: Applies to: Microsoft Outlook 2010 or Outlook 2007

A user in the Microsoft Answers forum wanted to know how to use a Word macro to apply formatting to selected text in Outlook 2010.

Outlook does not (and never had) a macro recorder but you can use some VBA code that was recorded in Word, in Outlook macros provided you reference the Word object model. You'll need to set the reference in the VB Editor's Tools, References menu. You'll also need to have macro security set to low or or sign the macro with a certificate to use it.

See How to use Outlook’s VBA Editor for help using the editor, setting security levels, and signing macros.

Reference the Word object model in Outlook's VBA Editor

I tested this macro in Outlook 2010; it should also work in Outlook 2007.

Format Selected Text Macro

To use, open the VBA Editor (Alt+F11) and paste the code into a module. Select a block of text while composing a message and run the macro.

   Public Sub FormatSelectedText()
    Dim objItem As Object
    Dim objInsp As Outlook.Inspector
    
    ' Add reference to Word library
    ' in VBA Editor, Tools, References
    Dim objWord As Word.Application
    Dim objDoc As Word.Document
    Dim objSel As Word.Selection
    On Error Resume Next
   
'Reference the current Outlook item 
    Set objItem = Application.ActiveInspector.currentItem
    If Not objItem Is Nothing Then
        If objItem.Class = olMail Then
            Set objInsp = objItem.GetInspector
            If objInsp.EditorType = olEditorWord Then
                Set objDoc = objInsp.WordEditor
                Set objWord = objDoc.Application
                Set objSel = objWord.Selection
    
       With objSel
       ' Formatting code goes here
            .Font.Color = wdColorBlue
            .Font.Size = 18
            .Font.Bold = True
            .Font.Italic = True
            .Font.Name = "Arial"
       End With

            End If
        End If
    End If
    
    Set objItem = Nothing
    Set objWord = Nothing
    Set objSel = Nothing
    Set objInsp = Nothing
End Sub

Find and Format Text Code Sample

This example creates appointments for the selected contact(s), adds their name and address to the appointment body then changes the font used for their name and address to 14 point bold. This method can be used with any word or phrase stored in a variable.

Format specific test in an Outlook item

The original macro this code sample came from collects data from all selected contacts and creates a string to use in a single appointment but I simplified it for this example. The original macro is at Outlook 2007 Calendar.


Sub CreateAppointmentSelectedContact()

 Dim ObjItem As Object
 Dim strFullName As String
 Dim strPhone As String
 Dim strAddress As String
 Dim strDynamicDL2 As String
 Dim strDynamicDL3 As String
 Dim StartDateTime
 Dim itmAppt

 Set oContact = ObjItem
 Set objApp = CreateObject("Outlook.Application")
 Set objNS = objApp.GetNamespace("MAPI")
 Set objSelection = objApp.ActiveExplorer.Selection

 For Each ObjItem In objSelection
 If ObjItem.Class = olContact Then

 strFullName = ObjItem.FullName
 strPhone = ObjItem.HomeTelephoneNumber
 strAddress = ObjItem.HomeAddressStreet & ", " & ObjItem.HomeAddressCity & ", " & ObjItem.HomeAddressState & " " & ObjItem.HomeAddressPostalCode

 strDynamicDL2 = ("Name: ") & strFullName
 strDynamicDL3 = ("Address: ") & strAddress
 
 Set MyFolder = Session.GetDefaultFolder(9)
 Set itmAppt = MyFolder.Items.Add("IPM.Appointment")

 itmAppt.Subject = strFullName & (" -- ") & strPhone

        With itmAppt
            .Body = strDynamicDL2 & vbCrLf & strDynamicDL3
        End With

 StartDateTime = Date + 3.5
 itmAppt.Start = StartDateTime
End If
 Next

itmAppt.Display

Dim objInsp As Outlook.Inspector
Dim objWord As Word.Application
Dim objDoc As Word.Document
Dim objSel As Word.Selection


Set objInsp = itmAppt.GetInspector
Set objDoc = objInsp.WordEditor
Set objWord = objDoc.Application
Set objSel = objWord.Selection

 
 objSel.Find.ClearFormatting
 objSel.Find.Replacement.ClearFormatting
 
    With objSel.Find.Replacement.Font
       .Size = 14
       .Bold = True
       .Underline = wdUnderlineSingle
       .Color = wdColorBlack
    End With
    
    With objSel.Find
       .Text = strFullName
       .Replacement.Text = strFullName
       .Forward = True
       .Wrap = wdFindContinue
       .Format = True
       .MatchCase = False
       .MatchWholeWord = False
       .MatchWildcards = False
       .MatchSoundsLike = False
       .MatchAllWordForms = False
    End With
 objSel.Find.Execute Replace:=wdReplaceAll
 
     With objSel.Find
       .Text = strAddress
       .Replacement.Text = strAddress
       .Forward = True
       .Wrap = wdFindContinue
       .Format = True
       .MatchCase = False
       .MatchWholeWord = False
       .MatchWildcards = False
       .MatchSoundsLike = False
       .MatchAllWordForms = False
    End With
 objSel.Find.Execute Replace:=wdReplaceAll
 
Set objInsp = Nothing
Set objDoc = Nothing
Set objSel = Nothing
Set objMsg = Nothing


Set objMsg = Nothing
 Set ObjItem = Nothing
 Set objFolder = Nothing
 Set objNS = Nothing
 Set objApp = Nothing
 

 End Sub


Written by

Diane Poremsky
A Microsoft Outlook Most Valuable Professional (MVP) since 1999, Diane is the author of several books, including Outlook 2013 Absolute Beginners Book. She also created video training CDs and online training classes for Microsoft Outlook. You can find her helping people online in Outlook Forums as well as in the Microsoft Answers and TechNet forums.

8 responses to “Use Word Macro to Apply Formatting to Outlook Email”

  1. Eric Campbell

    I tried this and got a user defined type not defined for the line
    Dim objWord As Word.Application.

    What I really want to do is have an outlook macro that does a find and replace of soome text. It was trivial to record the macro in word, but I couldn't do that in Outlook, so I am looking for a way of creating it in outlook withouot having to learn the entire internal structure of the product.

  2. Lino Wchima

    Hi Diane, very useful and well coded. Now it works in my Outlook 2010. Thanks.

  3. True Disbeliever

    Kewl, Diane!

    I wonder if something like the following code can be adapted to overwrite an Outlook email's styles with styles from NormalEmail.dotm.

    Here's a one-style example that I captured from Word:
    Application.OrganizerCopy Source:= _
    "C:\Users\whitney\AppData\Roaming\Microsoft\Templates\NormalEmail.dotm", _
    Destination:="Document1", Name:="Acronym", Object:=wdOrganizerObjectStyles

    Best regards,

  4. Amil

    Thank you!!

    Also note that you can do things like ".Font.Size = .Font.Size - 1".
    My only issue is that undoing my Macro takes multiple undo steps. For example, after using your Macro, I need to press ctrl-Z 5 times to undo each of the text modifications. Any ideas?

  5. Cary Belas

    Hi, if i insert a hyperlink into the email and only want this hyperlink in a large font size. how can do it ? thanks

Leave a Reply

If the Post Coment button disappears, press your Tab key.