seabear
asked on
VBA Word - How do I loop through a doc changing each paragraph?
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
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
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
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.
Dim rngPara As Range
Set rngPara = ActiveDocument.Paragraphs(
With rngPara
.Bold = True
.ParagraphFormat.Alignment
.Font.Name = "Arial"
End With
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
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
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.
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.
Learning...
ASKER
Nice clean code - thanks very much Ture - Dan
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
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
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Dan,
if you are happy with my answer, please do not forget to accept and grade it.
/Ture
if you are happy with my answer, please do not forget to accept and grade it.
/Ture
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.Co
Call IsLastCharParagraph(rngTex
Loop While InStr(rngTextRange.Text, Chr$(13)) <> 0
End If
End If
End Function
Sanjeev