#1
|
|||
|
|||
Find only the first Instance of Words -Then Do Replacement
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 |