![]() |
|
|
|
#1
|
|||
|
|||
|
Hello,
![]() I would be grateful for help on my code below. I just want to find the first instance of each words in the array and then do a replace task on it. Example find the first instance of Air Boat then do a replacement on that only. Ignore all other Air Boats Code:
Sub Insert_After_First_Instance()
Dim oRng As Word.Range
Dim arrWords
Dim i As Long
arrWords = Array("Air Boat", "Power Boat", "Ferry")
arrInsertAfter = Array("AB123", "PB456", "F123")
For i = 0 To UBound(arrWords)
Set oRng = ActiveDocument.Range
With oRng.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = arrWords(i)
.MatchWholeWord = True
.Replacement.Text = arrWords(i) & arrInsertAfter(i)
.Execute Replace:=wdReplaceAll
End With
Next
End Sub
dan |
|
#2
|
||||
|
||||
|
Change:
wdReplaceAll to: wdReplaceOne
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
|
#3
|
|||
|
|||
|
Thanks Paul,
I missed that one right under my nose ![]() My skills are not strong enough for the 2nd instance so ill leave it be cheers dan |
|
#4
|
||||
|
||||
|
Quote:
.Execute Replace:=wdReplaceOne .Execute Replace:=wdReplaceOne
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
|
#5
|
||||
|
||||
|
While Paul's modification works fine, it's a very quiet Sunday morning so ... you could also use
Code:
Sub Insert_After_One_Instance()
Dim oRng As Word.Range
Dim arrWords As Variant
Dim arrInsertAfter As Variant
Dim i As Long
arrWords = Array("Air Boat", "Power Boat", "Ferry")
arrInsertAfter = Array("AB123", "PB456", "F123")
For i = 0 To UBound(arrWords)
Set oRng = ActiveDocument.Range
With oRng.Find
Do While .Execute(FindText:=arrWords(i), MatchWholeWord:=True)
oRng.InsertAfter arrInsertAfter(i)
Exit Do
Loop
End With
Next i
Set oRng = Nothing
End Sub
Code:
Sub Insert_After_Two_Instances()
Dim oRng As Word.Range
Dim arrWords As Variant
Dim arrInsertAfter As Variant
Dim i As Long, j As Long
arrWords = Array("Air Boat", "Power Boat", "Ferry")
arrInsertAfter = Array("AB123", "PB456", "F123")
For i = 0 To UBound(arrWords)
Set oRng = ActiveDocument.Range
j = 0
With oRng.Find
Do While .Execute(FindText:=arrWords(i), MatchWholeWord:=True)
oRng.InsertAfter arrInsertAfter(i)
j = j + 1
oRng.Collapse 0
If j = 2 Then Exit Do 'Number of instances to process
Loop
End With
Next i
Set oRng = Nothing
End Sub
__________________
Graham Mayor - MS MVP (Word) (2002-2019) Visit my web site for more programming tips and ready made processes www.gmayor.com |
|
#6
|
||||
|
||||
|
Or, to update just the 2nd instance:
Code:
Sub Demo()
Dim arrFnd, arrRep, i As Long, j As Long
arrFnd = Array("Air Boat", "Power Boat", "Ferry")
arrRep = Array("AB123", "PB456", "F123")
For i = 0 To UBound(arrFnd)
j = 0
With ActiveDocument.Range
With .Find
.Text = arrFnd(i)
.MatchWholeWord = True
.Wrap = wdFindStop
.Execute
End With
Do While .Find.Found
j = j + 1
If j = 2 Then
.InsertAfter arrRep(i)
Exit Do
End If
.Collapse wdCollapseEnd
.Find.Execute
Loop
End With
Next i
End Sub
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
|
#7
|
|||
|
|||
|
Hi Paul and Graham,
many thanks for extending the code in a more advanced direction. I have found new combinations of replacements I can do now, which I didn't know was possible before. The counter will be very handy thanks ever so much again very appreciative of your generous efforts ![]() dan |
|
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
VBA: Replacement of words based on a list
|
roderh | Excel Programming | 2 | 09-06-2015 08:54 PM |
Find-replace using part of what was found in the replacement text
|
paulkaye | Word | 3 | 12-22-2014 02:52 AM |
Automatic Words replacement
|
psychologist | Word VBA | 3 | 11-22-2014 11:40 AM |
| Find instance of a word in a specific style and change its color | hwg | Word VBA | 7 | 02-20-2014 10:59 PM |
| Highlight text and find next instance | DrDOS | Word | 0 | 11-15-2010 04:02 PM |