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
 

McBanjo

Member
Outlook version
Outlook 2013 32 bit
Email Account
Exchange Server
No errors. It seems to cycle through and select all the appropriate words in quick succession, but only selects, doesn't edit them.
 

Michael Bauer

Senior Member
Outlook version
Outlook 2010 32 bit
Email Account
Exchange Server
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.
 

McBanjo

Member
Outlook version
Outlook 2013 32 bit
Email Account
Exchange Server
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
 

Michael Bauer

Senior Member
Outlook version
Outlook 2010 32 bit
Email Account
Exchange Server
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
witzker Macro to move @domain.xx of a Spammail to Blacklist in Outlook 2019 Outlook VBA and Custom Forms 4
S Macro for other actions - Outlook 2007 Outlook VBA and Custom Forms 18
C Macro to extract sender name & subject line of incoming emails to single txt file Outlook VBA and Custom Forms 3
L Macro/VBA to Reply All, with the original attachments Outlook VBA and Custom Forms 2
S Macro to move “Re:” & “FWD:” email recieved the shared inbox to a subfolder in outlook Outlook VBA and Custom Forms 0
S Outlook Macro to send auto acknowledge mail only to new mails received to a specific shared inbox Outlook VBA and Custom Forms 0
S Outlook Macro to move reply mail based on the key word in the subjectline Outlook VBA and Custom Forms 0
Eike Move mails via macro triggered by the click of a button? Outlook VBA and Custom Forms 0
S Macro or plug-in to see if specific person was included in this email Outlook VBA and Custom Forms 3
U Macro for reminders,tasks,calendar Outlook VBA and Custom Forms 4
V macro runs slower on startup than after Outlook VBA and Custom Forms 3
N Macro to move all recipients to CC while replying Outlook VBA and Custom Forms 0
A VBA macro for 15 second loop in send and received just for 1 specific mailbox Outlook VBA and Custom Forms 1
G VBA Macro Calendar Printing Assistant 4
R Help Revising VBA macro to delete email over different time span Outlook VBA and Custom Forms 0
M Outlook macro to automate search and forward process Outlook VBA and Custom Forms 6
R Macro Schedule every day in Outlook Using Outlook 0
L Moving emails with similar subject and find the timings between the emails using outlook VBA macro Outlook VBA and Custom Forms 1
Healy Consultants Macro to remove inside organization distribution list email address when reply to all recepients Outlook VBA and Custom Forms 0
geofferyh Cannot get Macro to SAVE more than one message attachment??? Outlook VBA and Custom Forms 5
N How can I increase/faster outlook VBA Macro Speed ? Using Outlook 2
4 Macro to set the category of Deleted Item? Outlook VBA and Custom Forms 2
D.Moore Folder view settings by VBA macro Outlook VBA and Custom Forms 57
A Outlook macro to create search folder with mail categories as criteria Outlook VBA and Custom Forms 3
Dave A Run macro on existing appointment when it changes Outlook VBA and Custom Forms 1
V Outlook Macro to show Flagged messages Outlook VBA and Custom Forms 2
O Run macro automatically at sending an email Using Outlook 11
R Retain Original Message When Forwarding With Macro Outlook VBA and Custom Forms 3
C Macro to add multiple recipients to message Outlook VBA and Custom Forms 3
B Reply and replyall macro is not working Outlook VBA and Custom Forms 1
O Macro - paste as plain text Outlook VBA and Custom Forms 2
J Help Please!!! Outlook 2016 - VBA Macro for replying with attachment in meeting invite Outlook VBA and Custom Forms 9
witzker Macro to set contact reminder to next day 9:00 Outlook VBA and Custom Forms 45
M Adding Macro to populate "to" "subject" "body" not deleting email string below. Outlook VBA and Custom Forms 5
E Copying data from e-mail attachement to EXCEL file via macro Outlook VBA and Custom Forms 38
M Macro to add date/time stamp to subject Outlook VBA and Custom Forms 4
R VBA macro - new message Outlook VBA and Custom Forms 3
S Example VBA Macro - To Conditionally Change the From Account and Add a BCC Address on Emails Outlook VBA and Custom Forms 11
S Macro using .SendUsingAccount only works the first time, after starting Outlook Outlook VBA and Custom Forms 4
S VBA Macro - Run-time error '424': object required - Help Please Outlook VBA and Custom Forms 3
B VBA Macro for assigning multiple Categories to an email in my Inbox Outlook VBA and Custom Forms 1
N Macro for attachment saved and combine Outlook VBA and Custom Forms 1
Sabastian Samuel HOW DO I FORWARD AN EMAIL WITH MACRO using an email that in the body of another email Outlook VBA and Custom Forms 3
C Search with Google Macro? Outlook VBA and Custom Forms 4
J Outlook 2013 Extract Flag Completed dates to Excel Macro Outlook VBA and Custom Forms 16
M Slow VBA macro in Outlook Outlook VBA and Custom Forms 5
D Print Attachments only in selected emails using a macro Outlook VBA and Custom Forms 3
M Macro for attachments download adjustment Outlook VBA and Custom Forms 3
M VBA macro for Inbox's attachments search Outlook VBA and Custom Forms 0

Similar threads

Top