VBA Word -改变标题使它失去了它的风格



这里有一堆问题问如何获得所有标题,但显然没有人试图改变标题…

我想把一些二级标题从旧标题改为新标题,所以我这样做了…

Sub changeHeading()
    Dim p As Paragraph
    For Each p In ActiveDocument.Paragraphs
        If p.Style = "Heading 2" Then _
            If p.Range.Text = "Old Heading" & vbCr Then p.Range.Text = "New Heading" & vbCr
    Next p
End Sub

标题有了新的名称,但它们也有了不同的样式——它们得到了下面段落的样式——也就是说,如果标题之后的文本有表格文本样式,标题之后将有表格文本样式(字体大小将保持旧标题的大小),章节的编号丢失。如果我将样式设置为p.Style = "Heading 2",这将使该标题(即下一段)之后的第一个文本具有Heading 2样式,尽管它仍然是相同的段落p(具有更改的文本,但在文档中的位置相同)。

情况:

1.4 Old Heading
some text

在改变标题和设置样式后

New Heading
1.4 some text    

其中some text的样式为Heading 2, New Heading的字体大小与标题相同,但没有编号。

第二个问题,它花费了令人难以置信的长时间(对于只有几个段落的小文档需要几秒钟)。

那么,如何改变标题呢?如何在一份大文件上不花费几分钟的时间?谢谢你的帮助。 编辑:

我发现用

改变文本
Call p.Range.Find.Execute(FindText:="Old Heading", ReplaceWith:="New Heading")

将保留样式,所以这将解决我原来改变文本的问题,但我仍然想知道为什么设置段落的文本会使它失去它的样式。

样式改变的原因是因为你覆盖了段落标记(vbCr)。段落级别的格式与段落字符直接关联。当你删除它,然后在下一段的开头插入另一个,新段落将采用其起始段落的格式。

顺便说一下,使用Range。使用Replace查找可能比循环段落集合更有效。Word的查找功能也可以搜索格式。因此,您可以使用单个Find操作来定位标题2样式和特定文本(不带段落标记)。然后使用Replace来书写新的文本。

在Word UI中测试,然后记录一个宏以获得基本语法。

最新更新