How to Select Every Other Line in a Word Document Using VBscript
Hello Experts.
I've been trying to create a simple macro that goes through a small word document and select all text on every other line. I have hundreds of documents where I have to do this manually, and it would really help if I could get a macro to do it.
It's definitely not correct, but here's the script I have right now:
Sub HighlightAlternateLines() Dim par As Paragraph For Each par In ActiveDocument.Paragraphs Selection.ExtendMode = True Selection.Expand wdParagraph GoDown = Selection.MoveDown(Unit:=wdLine, Count:=2) NextEnd Sub
Not clear what you expect to achieve. This will do it, but when it stops only the last odd paragraph is selected, since the previous odd paragraphs are not contiguous.
Sub SelectAlternateParagraphs() Dim par As Paragraph Dim Odd As Boolean For Each par In ActiveDocument.Paragraphs Odd = Not Odd If Odd Then par.Range.Select Next Next parEnd Sub
There is only one Selection object in a Word application with a single Start and a single End property, so making a selection automatically deselects what was previously selected.
stevepcguy
Could you clarify what you want to achieve with this? As already stated, you can have only one object selected at a time, unlike Excel, where you can have multiple groups of cells selected at once.
Is this to make every other line shaded a particular color? Make it bold, perhaps? That could be done using the For/next loop, but we would need to know what you plan to do.
Thanks Graham and Steve for the helpful responses. I guess I was hoping to find a VBscript equivalent to do what I'm doing manually which is holding the Mac Command button (Ctrl in Windows) and clicking to the left of every other line. Once the alternate lines are selected, I set their color to wdColorDarkBlue. The reason I wanted to have the selection process be a separate macro was in case the lines whose text needs to be dark blue are not perfectly setup. For example, there might be some preliminary text that is inserted.
The perfect VBscript to accomplish my objective would need to go through the words on the line to see if they meet a certain percentage of pre-defined criteria, and if so, set the entire line to dark blue and move on to the next. For simplicity sake, let's say that the criteria is that the first letter of all words is [A-G], and the percentage must be greater than or equal to 90%.
GrahamSkan
It sounds as if you need something like this:
Sub RecolourSomeParagraphs() Dim par As Paragraph Dim Odd As Boolean Dim wrd As Range Dim FirstLetterCount As Integer For Each par In ActiveDocument.Paragraphs Odd = Not Odd If Odd Then Debug.Print par.Range.Text FirstLetterCount = 0 For Each wrd In par.Range.Words Select Case wrd.Characters.First Case "A" To "G", "a" To "g" FirstLetterCount = FirstLetterCount + 1 End Select Next wrd Debug.Print FirstLetterCount, FirstLetterCount / par.Range.Words.Count If FirstLetterCount / par.Range.Words.Count >= 0.9 Then par.Range.Font.Color = wdColorDarkBlue End If End If Next parEnd Sub
Wow, Graham. This looks really promising. I tried it on my test document, but the lines that should have met our criteria didn't get set to dark blue.
Also note that we no longer need to worry about alternate lines since we're now checking every paragraph. I did try commenting out the lines referencing Odd/Even, but that didn't seem to help.
I have attached a sample document where the objective would be to have all lines containing guitar chords set to dark blue.
Open in new window