VBA Word - How do I loop through a doc changing each paragraph?

Posted on 2001-08-19
Last Modified: 2010-10-05
I would like to take a simple Word document and loop through from the start to the end and for each paragraph that I find I want to set the font color for the paragraph to Blue AND insert a blank line above the paragraph.

I am actually going to do some more complex formatting but the key thing I do not know is how to loop through a document repeating a set of actions for each paragraph.

Thanks in advance - Dan
Question by:seabear

Expert Comment

ID: 6404845

You Can read Paragraph of word doucument using VB. after read parapgraph u can change color, font... For More detail u cause use paragraph object in MSDN help.

Following are procedure to read the range & paragraph.

Public Sub GetRangeExample()
   ' This example shows how the Range method and the Range
   ' property both return the same characters.
   Dim rngRangeMethod        As Word.Range
   Dim rngRangeProperty      As Word.Range
   With ActiveDocument
      If .Sentences.Count >= 2 Then
            Set rngRangeMethod = .Range(.Sentences(2).Start, _
            Set rngRangeProperty = .Sentences(2)
      End If
   End With
   Debug.Print rngRangeMethod.Text
   Debug.Print rngRangeProperty.Text
End Sub

Function IsLastCharParagraph(ByRef rngTextRange As Word.Range, _
                            Optional blnTrimParaMark As Boolean = _
                            False) As Boolean
   ' This procedure accepts a character, word, sentence, or
   ' paragraph Range object as the first argument and returns True
   ' if the last character in the range is a paragraph mark, and
   ' False if it is not. The procedure also accepts an optional
   ' Boolean argument that specifies whether the Range object
   ' should be changed to eliminate the paragraph mark if it
   ' exists. When the blnTrimParaMark argument is True, this
   ' procedure calls itself recursively to strip off all trailing
   ' paragraph marks.
   Dim strLastChar As String
   strLastChar = Right$(rngTextRange.Text, 1)
   If InStr(strLastChar, Chr$(13)) = 0 Then
      IsLastCharParagraph = False
      Exit Function
      IsLastCharParagraph = True
      If Not blnTrimParaMark = True Then
            Exit Function
            rngTextRange.SetRange rngTextRange.Start, _
               rngTextRange.Start + rngTextRange.Characters.Count - 1
            Call IsLastCharParagraph(rngTextRange, True)
         Loop While InStr(rngTextRange.Text, Chr$(13)) <> 0
      End If
   End If
End Function

LVL 39

Expert Comment

ID: 6404846
in VB take reference of Microsoft word object library then you can create word object and open any existing document and format it

for example after opening the document to change properties of first para use following code.
in the same way you can loop through all paragraphs in the document, ActiveDocument.Paragraphs.Count gives you the number of paragraphs in the document.

Dim rngPara As Range

Set rngPara = ActiveDocument.Paragraphs(1).Range
With rngPara
   .Bold = True
   .ParagraphFormat.Alignment = wdAlignParagraphCenter
   .Font.Name = "Arial"
End With

LVL 22

Expert Comment

ID: 6405671

Something like this?

Sub LoopThroughParagraphs()
  Dim p As Paragraph
  For Each p In ActiveDocument.Paragraphs
    p.Range.InsertBefore vbCr
    p.Range.Font.Color = wdColorBlue
  Next p
End Sub

Ture Magnusson
Karlstad, Sweden
Salesforce Has Never Been Easier

Improve and reinforce salesforce training & adoption using WalkMe's digital adoption platform. Start saving on costly employee training by creating fast intuitive Walk-Thrus for Salesforce. Claim your Free Account Now


Expert Comment

ID: 6407620
I've been doing lots of VBA for word programming and Ture's solution is the best.  I would disregard sanjeevjain1973's solution because its re-inventing the wheel at best and buggy at worst.

Word already has made a paragraph an object.  Its easiest to use it as Ture has.

If you need to run it from VB then reference the Word library like appari talks about.
LVL 16

Expert Comment

ID: 6408462

Author Comment

ID: 6408489
Nice clean code - thanks very much Ture - Dan
LVL 22

Expert Comment

ID: 6408752

You are welcome!

I assume that you forgot to accept my comment as an answer, so I upgrade to answer now.

Sorklin - thanks for your comment. I'm glad that you like my approach also.

LVL 22

Accepted Solution

ture earned 100 total points
ID: 6408757
Ooops. I forgot to check "Answer"...
LVL 22

Expert Comment

ID: 6417419

if you are happy with my answer, please do not forget to accept and grade it.


Featured Post

Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
VBS file using code from 2nd file (txt or vbs) 4 47
MsgBox 4 71
VBA: loop recent folder and copy txt file. 8 51
Fastest way to find and count same items VB6 16 47
If you have ever used Microsoft Word then you know that it has a good spell checker and it may have occurred to you that the ability to check spelling might be a nice piece of functionality to add to certain applications of yours. Well the code that…
You can of course define an array to hold data that is of a particular type like an array of Strings to hold customer names or an array of Doubles to hold customer sales, but what do you do if you want to coordinate that data? This article describes…
Show developers how to use a criteria form to limit the data that appears on an Access report. It is a common requirement that users can specify the criteria for a report at runtime. The easiest way to accomplish this is using a criteria form that a…
This lesson covers basic error handling code in Microsoft Excel using VBA. This is the first lesson in a 3-part series that uses code to loop through an Excel spreadsheet in VBA and then fix errors, taking advantage of error handling code. This l…

726 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question