Macro to Format certain words in email message

Status
Not open for further replies.

McBanjo

Member
Outlook version
Outlook 2013 32 bit
Email Account
Exchange Server
I am trying to build an Outlook Macro for use when composing an email message to reformat several specific words at once in the email body so they are in their correct branding colours depending on what word they are.

The code needs to find a word that starts with the string "xp" and then reformats the entire word to bold and then changes the colour of the xp to the correct brand's colour depending on what the word is.

e..g. any word with "xpstorm" or "xprafts" needs to be bolded and the xp colour changed to the corresponding brand's colour (xpstorm, xprafts)

I have this scenario working in Word 2013, and I have an example code set below that I have tried to modify to replicate this functionality in an Outlook email by referencing Microsoft Word 15.0 Object Library in the Visual Basic References Tool.

Any assistance someone can provide would be greatly appreciated. It's really gone above my head.

Code:
Sub XPBranding()
    Dim insp As Outlook.Inspector
    Dim myObject As Object
    Dim msg As Outlook.MailItem
    Dim myDoc As Word.Document
    Dim mySelection As Word.Selection
    Dim strItem As String
    Dim strGreeting As String
   
    'XPBranding section
    Dim StrTxt As String, Rng As Range
Dim tempFont As String
Dim tempColour As String
Dim tempBold As String
Dim StrTxt2 As String, Rng2 As Range
StrTxt = "xp"
'XPBranding finish
         
    Set insp = Application.ActiveInspector
    Set myObject = insp.CurrentItem
   
  
    'The active inspector is displaying a mail item.
    If myObject.MessageClass = "IPM.Note" And _
        insp.IsWordMail = True Then
        Set msg = insp.CurrentItem
        'Grab the body of the message using a Word Document object.
        Set myDoc = insp.WordEditor
        Set mySelection = myDoc.Application.Selection
        Set hed = msg.GetInspector.WordEditor
        Set appWord = hed.Application
        Set appRng = appWord.Selection
        With mySelection.Range
        With mySelection.Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Text = "<" & StrTxt & "*>"
    .Replacement.Text = ""
    .Forward = True
    .Wrap = wdFindStop
    .Format = False
    .MatchWildcards = True
    .MatchCase = False
    .Execute
        End With
          Do While .Find.Found
  If .Font.Name <> "Arial" Then
    tempFont = .Duplicate.Font.Name
    tempColour = .Duplicate.Font.Color
    tempBold = .Duplicate.Font.Bold
    With .Duplicate
      .Font.Size = .Font.Size + 2
      .Font.Name = "Zrnic"
      .Font.Bold = True
      If .Text <> "" Then
      Select Case Split(.Text, StrTxt)(1)
        Case "swmm"
          .End = .Start + Len(StrTxt)
          .Font.Color = RGB(0, 122, 135)
        Case "swmmj"
          .End = .Start + Len(StrTxt)
          .Font.Color = RGB(0, 122, 135)
        Case "swmmk"
          .End = .Start + Len(StrTxt)
          .Font.Color = RGB(0, 122, 135)
        Case "swmmc"
          .End = .Start + Len(StrTxt)
          .Font.Color = RGB(0, 122, 135)
        Case "storm"
          .End = .Start + Len(StrTxt)
          .Font.Color = RGB(92, 127, 146)
        Case "2D"
          .End = .Start + Len(StrTxt)
          .Font.Color = RGB(198, 96, 5)
        Case "2d"
          .End = .Start + Len(StrTxt)
          .Font.Color = RGB(198, 96, 5)
        Case "rafts"
          .End = .Start + Len(StrTxt)
          .Font.Color = RGB(102, 73, 117)
        Case "wspg"
          .End = .Start + Len(StrTxt)
          .Font.Color = RGB(74, 170, 66)
        Case "culvert"
          .End = .Start + Len(StrTxt)
          .Font.Color = RGB(0, 70, 173)
        Case "site3D"
          .End = .Start + Len(StrTxt)
          .Font.Color = RGB(224, 170, 15)
        Case "paragon"
          .End = .Start + Len(StrTxt)
          .Font.Color = RGB(71, 215, 172)
        Case "ertcare"
          .End = .Start + Len(StrTxt)
          .Font.Color = RGB(79, 109, 94)
        Case "viewer"
          .End = .Start + Len(StrTxt)
          .Font.Color = RGB(110, 178, 189)
        Case "drainage"
          .End = .Start + Len(StrTxt)
          .Font.Color = RGB(35, 79, 51)
        Case "ratHGL"
          .End = .Start + Len(StrTxt)
          .Font.Color = RGB(160, 0, 84)
        Case "rathgl"
          .End = .Start + Len(StrTxt)
          .Font.Color = RGB(160, 0, 84)
      
        Case "dx"
          .Font.Name = tempFont
          .Font.Bold = tempBold
          .Font.Size = .Font.Size - 2
          .End = .Start + Len(StrTxt)
          .Font.Color = tempColour
        Case "x"
          .Font.Name = tempFont
          .Font.Bold = tempBold
          .Font.Size = .Font.Size - 2
          .End = .Start + Len(StrTxt)
          .Font.Color = tempColour
        Case "s"
          .Font.Name = tempFont
          .Font.Bold = tempBold
          .Font.Size = .Font.Size - 2
          .End = .Start + Len(StrTxt)
          .Font.Color = tempColour
            
    End Select
      End If
     
     
     
     
    End With
    End If
     mySelection.Find.Execute

  Loop
         End With
         End If
                
End Sub
 
No errors. It seems to cycle through and select all the appropriate words in quick succession, but only selects, doesn't edit them.
 
I'd walk through the code execution step for step by pressing f8, and see where it doesn't do what you expect. I haven't looked at the entire code; if there's a On Error Resume Next statement, remove it and see if you then get errors.

Not very necessary but for understanding the code it would be easier if you clean it up a little bit. For instance, you set two variables (mySelection and appRng) to the Word.Application.Selection object, which is confusing. Also, the latter seems to not be declared, which can cause logical errors as it then defaults to a Variant variable which behaves differently from the Selection object you want.
 
I've had a good look and it seems to find the correct words, just it doesn't modify the formats.

Code:
Sub Branding()
    Dim objOL As Outlook.Application
    Dim objNS As Outlook.NameSpace
    Dim objDoc As Word.Document
    Dim objSel As Word.selection
    Dim strStamp As String
    On Error Resume Next
    Set objOL = Application
    If objOL.ActiveInspector.EditorType = olEditorWord Then
        Set objDoc = objOL.ActiveInspector.WordEditor
        Set objNS = objOL.Session
        StrTxt = "xp"
        Set objSel = objDoc.Windows(1).selection
       
   With objSel.Range
   With objSel.Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Text = "<" & StrTxt & "*>"
    .Replacement.Text = ""
    .Forward = True
    .Wrap = wdFindStop
    .Format = False
    .MatchWildcards = True
    .MatchCase = False
    .Execute
   End With
  
   Do While .Find.Found
  If .Font.Name <> "Arial" Then
    tempFont = .Duplicate.Font.Name
    tempColour = .Duplicate.Font.Color
    tempBold = .Duplicate.Font.Bold
    With .Duplicate
      .Font.Size = .Font.Size + 2
      .Font.Name = "Zrnic"
      .Font.Bold = True
      If .Text <> "" Then
      Select Case Split(.Text, StrTxt)(1)
        Case "swmm"
          .End = .Start + Len(StrTxt)
          .Font.Color = RGB(0, 122, 135)
        Case "swmmj"
          .End = .Start + Len(StrTxt)
          .Font.Color = RGB(0, 122, 135)
        Case "swmmk"
          .End = .Start + Len(StrTxt)
          .Font.Color = RGB(0, 122, 135)
        Case "swmmc"
          .End = .Start + Len(StrTxt)
          .Font.Color = RGB(0, 122, 135)
        Case "storm"
          .End = .Start + Len(StrTxt)
          .Font.Color = RGB(92, 127, 146)
        Case "2D"
          .End = .Start + Len(StrTxt)
          .Font.Color = RGB(198, 96, 5)
        Case "2d"
          .End = .Start + Len(StrTxt)
          .Font.Color = RGB(198, 96, 5)
        Case "rafts"
          .End = .Start + Len(StrTxt)
          .Font.Color = RGB(102, 73, 117)
        Case "wspg"
          .End = .Start + Len(StrTxt)
          .Font.Color = RGB(74, 170, 66)
        Case "culvert"
          .End = .Start + Len(StrTxt)
          .Font.Color = RGB(0, 70, 173)
        Case "site3D"
          .End = .Start + Len(StrTxt)
          .Font.Color = RGB(224, 170, 15)
        Case "paragon"
          .End = .Start + Len(StrTxt)
          .Font.Color = RGB(71, 215, 172)
        Case "ertcare"
          .End = .Start + Len(StrTxt)
          .Font.Color = RGB(79, 109, 94)
        Case "viewer"
          .End = .Start + Len(StrTxt)
          .Font.Color = RGB(110, 178, 189)
        Case "drainage"
          .End = .Start + Len(StrTxt)
          .Font.Color = RGB(35, 79, 51)
        Case "ratHGL"
          .End = .Start + Len(StrTxt)
          .Font.Color = RGB(160, 0, 84)
        Case "rathgl"
          .End = .Start + Len(StrTxt)
          .Font.Color = RGB(160, 0, 84)
      
        Case "dx"
          .Font.Name = tempFont
          .Font.Bold = tempBold
          .Font.Size = .Font.Size - 2
          .End = .Start + Len(StrTxt)
          .Font.Color = tempColour
        Case "x"
          .Font.Name = tempFont
          .Font.Bold = tempBold
          .Font.Size = .Font.Size - 2
          .End = .Start + Len(StrTxt)
          .Font.Color = tempColour
        Case "s"
          .Font.Name = tempFont
          .Font.Bold = tempBold
          .Font.Size = .Font.Size - 2
          .End = .Start + Len(StrTxt)
          .Font.Color = tempColour
            
    End Select
      End If
     
     
     
     
    End With
    End If
     objSel.Find.Execute
    .Collapse wdCollapseEnd
    .Find.Execute
  Loop
         End With
         End If
       
    Set objOL = Nothing
    Set objNS = Nothing
End Sub
 
Why did you add On Error Resume Next?

The issue could be that you call .Range.Duplicate and change the properties of the copy instead of the original range. Another tip: Don't use nested With statements; I doubt anyone can see at a glance which objects the code is working on.
 
Status
Not open for further replies.
Similar threads
Thread starter Title Forum Replies Date
divan Macro to format email in a certain folder then forward to email address Using Outlook 3
M Outlook Macro to save as Email with a file name format : Date_Timestamp_Sender initial_Email subject Outlook VBA and Custom Forms 0
X Custom icon (not from Office 365) for a macro in Outlook Outlook VBA and Custom Forms 1
X Run macro automatically when a mail appears in the sent folder Using Outlook 5
mrrobski68 Issue with Find messages in a conversation macro Outlook VBA and Custom Forms 1
G Creating Macro to scrape emails from calendar invite body Outlook VBA and Custom Forms 6
M Use Macro to change account settings Outlook VBA and Custom Forms 0
J Macro to Reply to Emails w/ Template Outlook VBA and Custom Forms 3
C Outlook - Macro to block senders domain - Macro Fix Outlook VBA and Custom Forms 1
Witzker Outlook 2019 Macro to seach in all contact Folders for marked Email Adress Outlook VBA and Custom Forms 1
S macro error 4605 Outlook VBA and Custom Forms 0
A Macro Mail Alert Using Outlook 4
J Outlook 365 Outlook Macro to Sort emails by column "Received" to view the latest email received Outlook VBA and Custom Forms 0
J Macro to send email as alias Outlook VBA and Custom Forms 0
Witzker Outlook 2019 Macro GoTo user defined search folder Outlook VBA and Custom Forms 6
D Outlook 2016 Creating an outlook Macro to select and approve Outlook VBA and Custom Forms 0
Witzker Outlook 2019 Macro to send an Email Template from User Defined Contact Form Outlook VBA and Custom Forms 0
Witzker Outlook 2019 Macro to check Cursor & Focus position Outlook VBA and Custom Forms 8
V Macro to mark email with a Category Outlook VBA and Custom Forms 4
M Outlook 2019 Macro not working Outlook VBA and Custom Forms 0
S Outlook 365 Help me create a Macro to make some received emails into tasks? Outlook VBA and Custom Forms 1
Geldner Send / Receive a particular group via macro or single keypress Using Outlook 1
D Auto Remove [EXTERNAL] from subject - Issue with Macro Using Outlook 21
V Macro to count flagged messages? Using Outlook 2
sophievldn Looking for a macro that moves completed items from subfolders to other subfolder Outlook VBA and Custom Forms 7
S Outlook Macro for [Date][Subject] Using Outlook 1
E Outlook - Macro - send list of Tasks which are not finished Outlook VBA and Custom Forms 3
E Macro to block senders domain Outlook VBA and Custom Forms 1
D VBA Macro to Print and Save email to network location Outlook VBA and Custom Forms 1
N VBA Macro To Save Emails Outlook VBA and Custom Forms 1
N Line to move origEmail to subfolder within a reply macro Outlook VBA and Custom Forms 0
Witzker Outlook 2019 Macro to answer a mail with attachments Outlook VBA and Custom Forms 2
A Outlook 2016 Macro to Reply, ReplyAll, or Forward(but with composing new email) Outlook VBA and Custom Forms 0
J Macro to Insert a Calendar Outlook VBA and Custom Forms 8
W Macro to Filter Based on Latest Email Outlook VBA and Custom Forms 6
T Macro to move reply and original message to folder Outlook VBA and Custom Forms 6
D Autosort macro for items in a view Outlook VBA and Custom Forms 2
S HTML to Plain Text Macro - Help Outlook VBA and Custom Forms 1
A Macro to file emails into subfolder based on subject line Outlook VBA and Custom Forms 1
N Help creating a VBA macro with conditional formatting to change the font color of all external emails to red Outlook VBA and Custom Forms 5
S Visual indicator of a certain property or to show a macro toggle Outlook VBA and Custom Forms 2
L Modifying VBA script to delay running macro Outlook VBA and Custom Forms 3
S Macro to extract and modify links from emails Outlook VBA and Custom Forms 3
M Replyall macro with template and auto insert receptens Outlook VBA and Custom Forms 1
L Macro to add Date & Time etc to "drag to save" e-mails Outlook VBA and Custom Forms 17
S Macro for Loop through outlook unread emails Outlook VBA and Custom Forms 2
Globalforester ItemAdd Macro - multiple emails Outlook VBA and Custom Forms 3
S Macro to extract email addresses of recipients in current drafted email and put into clipboard Outlook VBA and Custom Forms 2
Witzker HowTo start a macro with an Button in OL contact form Outlook VBA and Custom Forms 12
Witzker Macro to move @domain.xx of a Spammail to Blacklist in Outlook 2019 Outlook VBA and Custom Forms 7

Similar threads

Back
Top