Solved

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

Posted on 2001-08-19
9
1,291 Views
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
0
Comment
Question by:seabear
9 Comments
 
LVL 1

Expert Comment

by:sanjeevjain1973
Comment Utility

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, _
                .Sentences(2).End)
            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
   Else
      IsLastCharParagraph = True
      If Not blnTrimParaMark = True Then
            Exit Function
      Else
         Do
            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



Sanjeev
0
 
LVL 39

Expert Comment

by:appari
Comment Utility
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


0
 
LVL 22

Expert Comment

by:ture
Comment Utility
seaber,

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
0
 
LVL 1

Expert Comment

by:Sorklin
Comment Utility
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.
0
Free Trending Threat Insights Every Day

Enhance your security with threat intelligence from the web. Get trending threat insights on hackers, exploits, and suspicious IP addresses delivered to your inbox with our free Cyber Daily.

 
LVL 16

Expert Comment

by:Richie_Simonetti
Comment Utility
Learning...
0
 

Author Comment

by:seabear
Comment Utility
Nice clean code - thanks very much Ture - Dan
0
 
LVL 22

Expert Comment

by:ture
Comment Utility
Dan,

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.

/Ture
0
 
LVL 22

Accepted Solution

by:
ture earned 100 total points
Comment Utility
Ooops. I forgot to check "Answer"...
0
 
LVL 22

Expert Comment

by:ture
Comment Utility
Dan,

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

/Ture
0

Featured Post

Highfive + Dolby Voice = No More Audio Complaints!

Poor audio quality is one of the top reasons people don’t use video conferencing. Get the crispest, clearest audio powered by Dolby Voice in every meeting. Highfive and Dolby Voice deliver the best video conferencing and audio experience for every meeting and every room.

Join & Write a Comment

When designing a form there are several BorderStyles to choose from, all of which can be classified as either 'Fixed' or 'Sizable' and I'd guess that 'Fixed Single' or one of the other fixed types is the most popular choice. I assume it's the most p…
If you need to start windows update installation remotely or as a scheduled task you will find this very helpful.
Get people started with the utilization of class modules. Class modules can be a powerful tool in Microsoft Access. They allow you to create self-contained objects that encapsulate functionality. They can easily hide the complexity of a process from…
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…

772 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

Need Help in Real-Time?

Connect with top rated Experts

10 Experts available now in Live!

Get 1:1 Help Now