![]() |
|
#1
|
|||
|
|||
|
I'm trying to apply a style to the next paragraph after changing the preceding one, but I get an error. Can someone help? Thanks!
Code:
Dim oPar As Paragraph
For Each oPar In ActiveDocument.Paragraphs
If oPar.Range.ParagraphFormat.Alignment = wdAlignParagraphRight Then
oPar.Range.Style = "MyStyle1"
' oPar.Next.Style = "MyStyle2" '---> I get an error
End If
Next oPar
|
|
#2
|
|||
|
|||
|
Hi, RobiNew! Although I didn't test it, but try:
oPar.range.Next.Style = "MyStyle2" |
|
#3
|
|||
|
|||
|
RobiNew,
I doubt that would make a difference. The most likely problem is that you find yourself at the end of the document and there is no .Next paragraph to apply the style to. When you post, instead of "I get an error" How about I get the following error Err.Number and Err.Description. Try: Code:
Sub A()
Dim oPar As Paragraph
For Each oPar In ActiveDocument.Paragraphs
If oPar.Range.ParagraphFormat.Alignment = wdAlignParagraphRight Then
oPar.Style = "MyStyle1"
If Not oPar.Range.End = ActiveDocument.Range.End Then
oPar.Next.Style = "MyStyle2" '---> I get an error
End If
'End If
Next oPar
End Sub
|
|
#4
|
|||
|
|||
|
There are better ways than the simple fix above.
For one, if your document has a thousand or say a million paragraphs, it would be inefficient to evaluate each one to see if it was the last one. So, since you now know that there is no next paragraph following the last paragraph of a document you could use an error handler: Code:
Sub A()
Dim oPar As Paragraph
For Each oPar In ActiveDocument.Paragraphs
'If oPar.Range.ParagraphFormat.Alignment = wdAlignParagraphRight Then
oPar.Style = "Body Text"
On Error GoTo Err_Handler
oPar.Next.Style = "Body Text"
'End If
Next oPar
lbl_Exit:
Exit Sub
Err_Handler:
If Err.Number = 91 Then
If oPar.Range.End = ActiveDocument.Range.End Then
'You know this error will occur so it is not an issue
Else
MsgBox Err.Number & " " & Err.Description
End If
Else
MsgBox Err.Number & " " & Err.Description
End If
Resume lbl_Exit
End Sub
or you could adjust your processing range so you never reach the last paragraph: Code:
Sub B()
Dim oRng As Range
Dim oPar As Paragraph
Set oRng = ActiveDocument.Range
oRng.End = ActiveDocument.Range.Paragraphs.Last.Previous.Range.End
For Each oPar In oRng.Paragraphs
If oPar.Range.ParagraphFormat.Alignment = wdAlignParagraphRight Then
oPar.Style = "Body Text"
oPar.Next.Style = "Body Text"
End If
Next oPar
lbl_Exit:
Exit Sub
End Sub
|
|
#5
|
|||
|
|||
|
Thanks, Vivka! Gmaxey is quite right: I had tried the line you suggest before posting, then I discovered that the error was due to the structure of the larger macro in which the code was inserted. So Gmaxey is again quite right: "How about: I get the following error Err.Number and Err.Description". Thanks, Gmaxey for the very instructive alternatives! Now everything seems to be OK.
|
|
#6
|
|||
|
|||
|
Yes, I completely agree with Greg!
|
|
#7
|
|||
|
|||
|
Suppose the condition in Sub B() was: If oPar.Range Like Chr(2). Why is it that the code doesn't recongnize the presence of a footnote reference mark? Thanks!
|
|
#8
|
|||
|
|||
|
What does oPar.Range Like Chr(2) have to do with the presence or absence of a footnote?
How about: If oPar.Range.Footnotes.Count > 0 Then |
|
#9
|
|||
|
|||
|
It's perfect. Thank you very much indeed, Gmaxey, for helping me in the transition from Selection to Range!
|
|
| Thread Tools | |
| Display Modes | |
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| How to apply a style to a group of words inside a paragraph? | saint—112 | Word | 3 | 09-07-2022 09:55 PM |
| Apply table style | shahid.majeed | Word Tables | 0 | 10-02-2019 01:25 AM |
| My style keeps changing, can't get saved style to apply | Meenie50 | Word | 7 | 07-20-2017 03:47 PM |
| Paragraph space before - can styles apply it intelligently? | timpani | Word | 7 | 10-23-2012 04:08 PM |
| Character style stripped while applying paragraph style | sams_gates | Word | 0 | 08-29-2009 02:03 AM |