View Full Version : [SOLVED:] duplicate specific text and underline it
Ethen5155
05-29-2019, 02:56 AM
Hello All,
i have a huge number of files need to be translated with specific instructions
the most complicated case which i face is to duplicate all turquoise highlighted text and make the duplicated one's first character to be underlined
and the original one to be hidden as shown below
Before
24294
After
24295
i have attached a sample file for such a case
Thanks in advance for any hint or tips
Cheers
Cross Posted link: Here (https://www.excelforum.com/word-programming-vba-macros/1277672-duplicate-specific-text-and-underline-it.html#post5128777)
gmayor
05-29-2019, 05:27 AM
I guess something like
Sub Macro1()'Graham Mayor - https://www.gmayor.com - Last updated - 29 May 2019
Dim oRng As Range
Dim i As Integer
    Set oRng = ActiveDocument.Range
    With oRng.Find
        .Highlight = True
        Do While .Execute
            oRng.Font.Underline = wdUnderlineNone
            oRng.NoProofing = True
            i = Len(oRng)
            oRng.InsertAfter oRng.Text
            oRng.MoveEnd Count:=i
            oRng.Characters(i + 1).Underline = wdUnderlineSingle
            For i = i To 1 Step -1
                oRng.Characters(i).Font.Hidden = True
            Next i
            oRng.Collapse 0
        Loop
    End With
lbl_Exit:
    Set oRng = Nothing
    Exit Sub
End Sub
should work
Ethen5155
05-29-2019, 05:37 AM
Hello Graham,
really i don't have enough words to thank you. you save my day 
just one more thing to help if possible, as you see below it is supposed to be a space here 
24298
your support is always appreciated
gmaxey
05-29-2019, 11:24 AM
You might try this adaptation of Graham's original code.
Sub Macro1() 
Dim oRng As Range
Dim oRng2 As Range
Dim i As Long
  Set oRng = ActiveDocument.Range
  With oRng.Find
    .Highlight = True
    Do While .Execute
      oRng.Font.Underline = wdUnderlineNone
      oRng.NoProofing = True
      i = Len(oRng)
      Set oRng2 = oRng.Duplicate
      oRng2.InsertAfter " " & oRng.Text
      oRng2.Characters(i + 2).Underline = wdUnderlineSingle
      oRng.Font.Hidden = True
      oRng.Start = oRng2.End
      oRng.End = ActiveDocument.Range.End
    Loop
  End With
lbl_Exit:
  Set oRng = Nothing
  Exit Sub
End Sub
Ethen5155
05-30-2019, 01:59 AM
Hi Greg,
Your code works great but if i used it on more than one page it crashes!!
i think this is because the huge number of terms that need to be duplicated, i tried it on a file contains about 1000 terms
or is it about the the (Loop) in the code?!
Cheers
gmayor
05-30-2019, 04:04 AM
Add the line
DoEvents
immediately before the line
Loop
This will prevent the bottleneck
Ethen5155
05-30-2019, 05:02 AM
Hi Graham,
i'm really appreciate your support but unfortunately it still crashing !!
i have attached a sample file from one page only that failed to run the code on
Ethen5155
05-30-2019, 05:11 AM
i think there is issue about the table?!!
when i convert the table to text or delete the tables it works very well
gmayor
05-30-2019, 08:23 PM
Use the following variation of my original code which I think does what you now want, and doesn't crash in your table.
Sub Macro1() 
'Graham Mayor - https://www.gmayor.com - Last updated - 31 May 2019
Dim oRng As Range
Dim i As Integer
    Set oRng = ActiveDocument.Range
    With oRng.Find
        .Highlight = True
        Do While .Execute
            oRng.Font.Underline = wdUnderlineNone
            oRng.NoProofing = True
            i = Len(oRng)
            oRng.InsertAfter Chr(32) & oRng.Text
            oRng.MoveEnd Count:=i + 1
            oRng.Characters(i + 2).Underline = wdUnderlineSingle
            For i = i To 1 Step -1
                oRng.Characters(i).Font.Hidden = True
            Next i
            oRng.Collapse 0
            DoEvents
        Loop
    End With
lbl_Exit:
    Set oRng = Nothing
    Exit Sub
End Sub
Ethen5155
06-01-2019, 09:27 AM
Hi Graham ,
you are my savior :) :)
it works like magic now, your support is highly appreciated
Cheers
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions Inc. All rights reserved.