#1
|
|||
|
|||
How to loop once through document
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 |
Thread Tools | |
Display Modes | |
|
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 |