这里有一堆问题问如何获得所有标题,但显然没有人试图改变标题…
我想把一些二级标题从旧标题改为新标题,所以我这样做了…
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中测试,然后记录一个宏以获得基本语法。