Highlight text via macro

G

Grey Old Man

I am a novice writing a Word macro where I wish to highlight a selection of
words in a document. These pre-defined words are listed in a table in a
second Word document.

I have taken and attempted to modify my macro from an earlier posting on
this forum.

It fails with the message “Named argument not found†on the statement
‘HighlightColorIndex:=wdBrightGreen’.

The code is:

Sub Highlighting()
Dim TableDoc As Document ' The document that contains the table
Dim RefDoc As Document ' The document that is being referenced (highlighted)
Dim cTable As Table
Dim oFind As Range
Dim i As Long
Dim sFname As String
'Change the path to reflect where you have stored the table document.
sFname = "C:\My Documents\Testing\Highlighting Macro.doc"
Set RefDoc = ActiveDocument
Set TableDoc = Documents.Open(sFname)
Set cTable = TableDoc.Tables(1)
RefDoc.Activate
RefDoc.TrackRevisions = True
For i = 1 To cTable.Rows.Count
Set oFind = cTable.Cell(i, 1).Range
oFind.End = oFind.End - 1
With Selection
.HomeKey wdStory
With .Find
.ClearFormatting
.Replacement.ClearFormatting
.Execute findText:=oFind, _
MatchWholeWord:=True, _
MatchWildcards:=False, _
HighlightColorIndex:=wdBrightGreen, _
Forward:=True, _
Wrap:=wdFindContinue
End With
End With
Next i
TableDoc.Close wdDoNotSaveChanges
RefDoc.TrackRevisions = False
End Sub

Any help would be appreciated.
Thanks in anticipation.
 
G

Greg Maxey

That is because "HighlightColorIndex" is not an argument. "Highlight" is an
arguement that you can set to true, false or undefined.

When set to true it will hightlight with the applications current highlight
color. If brightgreen is not the current color then you could do something
like this:

Sub Highlighting()
Dim lngHCI As Long
lngHCI = Options.DefaultHighlightColorIndex
Options.DefaultHighlightColorIndex = wdBrightGreen
'Your corrected code here.
Options.DefaultHighlightColorIndex = lngHCI
End Sub
 
G

Grey Old Man

Thanks. I have made the change but the error message is the same:
Code is now as follows:

Sub Highlighting()
Dim TableDoc As Document ' The document that contains the table
Dim RefDoc As Document ' The document that is being referenced (highlighted)
Dim cTable As Table
Dim oFind As Range
Dim i As Long
Dim sFname As String
Dim lngHCI As Long
'Change the path to reflect where you have stored the table document.
sFname = "C:\My Documents\Highlighting Macro.doc"
Set RefDoc = ActiveDocument
Set TableDoc = Documents.Open(sFname)
Set cTable = TableDoc.Tables(1)
RefDoc.Activate
RefDoc.TrackRevisions = True
lngHCI = Options.DefaultHighlightColorIndex
Options.DefaultHighlightColorIndex = wdBrightGreen
For i = 1 To cTable.Rows.Count
Set oFind = cTable.Cell(i, 1).Range
oFind.End = oFind.End - 1
MsgBox (oFind) 'Testing. This (correctly) displays all of the words in
the table!
With Selection
.HomeKey wdStory
With .Find
.ClearFormatting
.Replacement.ClearFormatting
.Execute findText:=oFind, _
MatchWholeWord:=True, _
MatchWildcards:=False, _
Highlight:=True, _
Forward:=True, _
Wrap:=wdFindContinue
End With
End With
Next i
TableDoc.Close wdDoNotSaveChanges
Options.DefaultHighlightColorIndex = lngHCI
RefDoc.TrackRevisions = False
End Sub
 
G

Graham Mayor

Assuming that you want all the words listed to be highlighted in Green :-

Sub Highlighting()
Dim oChanges As Document, oDoc As Document
Dim oTable As Table
Dim oRng As Range
Dim rFindText As Range
Dim i As Long
Dim sFname As String
sFname = "C:\My Documents\Highlighting Macro.doc"
Set oDoc = ActiveDocument
Set oChanges = Documents.Open(sFname)
Set oTable = oChanges.Tables(1)
For i = 1 To oTable.Rows.Count
Set oRng = oDoc.Range
Set rFindText = oTable.Cell(i, 1).Range
rFindText.End = rFindText.End - 1
With oRng.Find
.ClearFormatting
.Replacement.ClearFormatting
Do While .Execute(findText:=rFindText, _
MatchWholeWord:=True) = True
oRng.HighlightColorIndex = wdBrightGreen
Loop
End With
Next i
oChanges.Close wdDoNotSaveChanges
End Sub

--
<>>< ><<> ><<> <>>< ><<> <>>< <>><<>
Graham Mayor - Word MVP


<>>< ><<> ><<> <>>< ><<> <>>< <>><<>
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top