![Word 2010 VBA 应用样式但不改变字体](https://linux22.com/image/1440342/Word%202010%20VBA%20%E5%BA%94%E7%94%A8%E6%A0%B7%E5%BC%8F%E4%BD%86%E4%B8%8D%E6%94%B9%E5%8F%98%E5%AD%97%E4%BD%93.png)
我并不经常使用 VBA,我正在尝试组合一个宏,它选择文档中字体大小为 13.5 pt 的所有文本并将其样式更改为标题 1。到目前为止,我有以下代码:
Sub FormatSectionHeaders()
Application.ScreenUpdating = False
Dim oRng As Word.Range
Set oRng = ActiveDocument.Content
oRng.Find.ClearFormatting
oRng.Find.Replacement.ClearFormatting
oRng.Find.Replacement.Style = wdStyleHeading1
With oRng.Find
.Font.Size = 13.5
.Text = ""
.Execute Format:=True, Replace:=wdReplaceAll, Wrap:=wdFindContinue
End With
End Sub
这样会选择正确的文本并应用样式,但出于某种原因,它不会覆盖所有原始格式 - 例如,字体和字体大小不会更改为与样式相匹配。有人能告诉我我做错了什么吗?
注意:我可以使用以下循环使其工作,但这比使用 replaceall 慢很多,所以我想尝试修复上面的代码,而不是使用这样的代码。
With oRng.Find
.ClearFormatting
.Text = ""
.Font.Size = 13.5
While .Execute
oRng.Style = ActiveDocument.Styles(wdStyleHeading1)
oRng.Collapse wdCollapseEnd
Wend
End With
答案1
看来,这个问题以及我在使用 VBA 代码时遇到的其他问题都是由于被更改的文本位于大型(不可见)表格的单元格内。在将文本仅传输到另一个文档时,问题得到了解决。请参阅注释,了解如何强制样式在单元格内生效。
答案2
您正在寻找字体大小为 13.5 的内容,并尝试为该内容应用标题 1 样式。但在 Word 文档默认模板(普通)中,它具有第一级标题样式作为标题 1,因此您可以使用如下代码
oRng.style =“标题1”