这里有一堆问题询问如何获得所有标题,但显然没有人试图改变标题......
我想将 Old Heading 的某些二级标题更改为 New Heading ,所以我这样做了......
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")
将保留样式,所以这将解决我原来更改文本的问题,但我仍然想知道为什么设置段落文本会使其失去风格。
答案 0 :(得分:1)
样式更改的原因是因为您覆盖了段落标记(vbCr)。段落级格式直接与段落字符相关联。当你删除它,然后在下一个段落的开头插入另一个段落时,新段落将采用它所源自的段落的格式。
顺便说一句,使用Range.Find和Replace可能比循环段集合更有效。 Word的查找功能还可以搜索格式。因此,您可以使用单个“查找”操作来查找标题2样式和特定文本(不带段落标记)。然后使用Replace来编写新文本。
在Word UI中测试,然后录制宏以获得基本语法。