![]() |
|
|
|
#1
|
|||
|
|||
|
Hi all,
I have a macro that works well, and I want to have it repeat by going through the document one time, from the first line to the last line (the number of lines will always be different in the document at hand). I can't repeat forever or it will never stop (because the word that it finds will still be in the document). The macro finds the word "invited," jumps to the beginning of the line, and overwrites the first character with the waving hand emoji. I want that to happen one time each for any line in the document that contains the word "invited." Code:
Sub Invited()
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "invited"
.Replacement.Text = " "
.Forward = True
.Wrap = wdFindAsk
.Format = False
.MatchCase = True
.MatchWholeWord = True
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute
Selection.HomeKey Unit:=wdLine
Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend
Dim strW As String
strW = ChrW(55357) & ChrW(56395)
Selection.TypeText Text:=strW
End Sub
Code:
Dim lastPos As Long
lastPos = -1
Do While Selection.Find.Execute = True
If lastPos > Selection.Start Then Exit Do
Selection.EndKey Unit:=wdLine
Selection.TypeParagraph
Loop
|
|
#2
|
|||
|
|||
|
Hi,
It can be repeated forever if you move to the end of the line after making the edit, I think. The code below works for me, anyways: Code:
Sub Invited()
'Go to the beginning of the document
Selection.HomeKey Unit:=wdStory
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "invited"
.Replacement.Text = " "
.Forward = True
.Wrap = wdFindAsk
.Format = False
.MatchCase = True
.MatchWholeWord = True
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
While Selection.Find.Execute
Selection.HomeKey Unit:=wdLine
Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend
Dim strW As String
strW = ChrW(55357) & ChrW(56395)
Selection.TypeText Text:=strW
'Without line this it runs forever
Selection.EndKey Unit:=wdLine
Wend
End Sub
|
|
#3
|
|||
|
|||
|
Awesome, thank you!
|
|
#4
|
|||
|
|||
|
You're welcome
|
|
#5
|
|||
|
|||
|
You could also use a range variable:
Code:
Sub Invited()
Dim oRng As Range
Set oRng = ActiveDocument.Range
With oRng.Find
.Text = "invited"
.Wrap = wdFindStop
While .Execute
oRng.Select
Selection.HomeKey Unit:=wdLine
Selection.Characters.First = ChrW(55357) & ChrW(56395)
oRng.Collapse wdCollapseEnd
Wend
End With
End Sub
|
|
| Tags |
| loop macro |
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| vba for next loop | phoenixmoto | Word VBA | 4 | 11-06-2018 01:59 PM |
Loop thru document and create bookmarks
|
jeffreybrown | Word VBA | 3 | 09-22-2018 06:04 AM |
| Loop true all opned word document | elbartje | Word VBA | 1 | 06-12-2017 05:27 PM |
| VB for Word - Need macro to loop each line in a document | NDeane | Word VBA | 5 | 12-22-2015 08:12 PM |
Loop through files and Copy Table Row and Paste into Different Document
|
spiderman1369 | Word VBA | 2 | 10-15-2014 08:30 AM |