Word VBA下一段风格不更新

时间:2016-08-23 11:15:07

标签: vba ms-word

我无耻地录制了一个宏来修改默认标题样式2 - 5,将他们的.NextParagraphStyle更改为我自己制作的一个名为Normal_lvl2,Normal_lvl3等的内容:

With ActiveDocument.Styles("Heading 2").ParagraphFormat ' etc etc
    .LeftIndent = CentimetersToPoints(1.13)
    .RightIndent = CentimetersToPoints(0)
    .LineSpacingRule = wdLineSpaceDouble
    .Alignment = wdAlignParagraphLeft
    .FirstLineIndent = CentimetersToPoints(-0.63)
    .OutlineLevel = wdOutlineLevel2
    .NoSpaceBetweenParagraphsOfSameStyle = False
    .AutomaticallyUpdate = True
    .BaseStyle = "Normal"
    .NextParagraphStyle = "Normal_lvl2" ' here is the next style
End With

问题是当我运行宏或手动设置行的样式时,文档实际上并没有更新下一个段落样式。新样式适用于实际标题行,但下一段不会更改。

我确实尝试遍历所有段落并设置样式但是花了太长时间(我在运行20分钟后退出,文档是160页)。具体来说,我将所有标题都放入一个数组中,使用Find为数组中的每个标题返回一个范围,并根据标题级别设置下一个范围样式。也许不是最好的方法,但我对Word对象模型不太熟悉。

所以我的问题是 - 是否有一种有效的方法来自动化我的自定义样式的应用并确保下一个段落样式也被更改?

1 个答案:

答案 0 :(得分:2)

您应该迭代文档中的所有段落,然后相应地调整以下段落,就像在以下示例中完成一样:

Sub ChangeParagraphsAfterHeading()

    Dim para As Paragraph
    Dim nextPara As Paragraph

    For Each para In ActiveDocument.Paragraphs
        If para.Style = "Heading 2" Then
            Set nextPara = para.Next
            If Not nextPara Is Nothing Then
                nextPara.Style = "Normal_lvl2"
            End If
        End If
    Next

End Sub

我假设你可能想要调整两个标题之间所有段落的样式。上面的示例还没有这样做,但它应该让你开始。