【发布时间】:2020-07-04 16:05:01
【问题描述】:
过去,我一直对仅在 MS Word 中没有“干净的直接格式化”感到沮丧。我必须承认它可能隐藏在我找不到的某些菜单中,但是由于我在 VBA 中找到了用于此目的的方法,我决定创建三个小宏,它们将简单地删除直接段落格式、字符格式或两者都删除到选定的文本。
Sub Clean_Direct()
'
' Delete direct formatting to paragraph and character
'
'
Selection.ClearCharacterDirectFormatting
Selection.ClearParagraphDirectFormatting
End Sub
Sub Clean_Direct_character()
'
' Delete direct formatting to character
'
'
Selection.ClearCharacterDirectFormatting
End Sub
Sub Clean_Direct_paragraph()
'
' Delete direct formatting to paragraph
'
'
Selection.ClearParagraphDirectFormatting
End Sub
所有这些都很好,除非我尝试选择文档中的所有脚注,它抱怨我越界了:D 我正在考虑一个选择每个故事范围的循环,但我能找到的所有示例都有某种 find 和 ranges 以及不可用的 ClearFormatting 方法。 到目前为止我的代码是
Sub Cleanup()
Dim Rng As Range
For Each Rng In ActiveDocument.StoryRanges
With Rng
With Selection.Range
Selection.ClearCharacterDirectFormatting
Selection.ClearParagraphDirectFormatting
End With
End With
Next
End Sub
但我发现它根本不起作用,我被卡住了。 附带说明一下,ClearCharacterDirectFormatting 不会清除突出显示的文本。
编辑:我已经开始创建一些 If 子句来弄清楚如何选择每个尾注或脚注的文本进行选择,但我似乎无法抓住正确的对象。我注释掉了 ElseIf 语句,因为它抱怨使用了错误的方法
Sub Cleanup()
For Each myStory In ActiveDocument.StoryRanges
If myStory.StoryType = wdMainTextStory Then
myStory.Select
Selection.ClearCharacterDirectFormatting
Selection.ClearParagraphDirectFormatting
Selection.Collapse
' ElseIf myStory.StoryType = wdEndnotesStory Then
' For Each myEndnote In myStory.Endnotes
' myEndnote.Text.Select
' Selection.ClearCharacterDirectFormatting
' Selection.ClearParagraphDirectFormatting
' Next myEndnote
' ElseIf myStory.StoryType = wdFootnotesStory Then
' For Each myFootnote In myStory.Footnotes
' myFootnote.FormattedText.Select
' Selection.ClearCharacterDirectFormatting
' Selection.ClearParagraphDirectFormatting
' Next myFootnote
End If
Next myStory
End Sub
这是目前的总体思路。
【问题讨论】:
-
故事范围是一个集合,因此您无需指定您正在使用的故事范围。 Yu ay 发现以下链接很有帮助,尤其是第一个示例是关于删除本地格式的。 docs.microsoft.com/en-us/office/vba/api/word.storyranges
-
非常感谢,不幸的是 .Font.Reset 也从字符样式中删除了字符,这正是我想要避免的。到目前为止,唯一的工作方法是上面的那些,它们只能用于选择而不是范围。
-
这是一个意想不到的结果,表明您正在做一些不太正确的事情。当我在这里使用 .font.reset 和 .paragraphs.reset 时,它会删除本地格式,使文本保持不变。
-
当然,您可以捕获要保留的字符样式跨越的所有范围的详细信息,然后在将字符样式恢复到各自的范围之前使用 .Font.Reset。这样,您还可以删除任何不需要的字符样式。
-
@freeflow,我同意你的看法,根据文档,这不是它应该如何工作的。它保留了段落样式,但删除了字符样式并保留了高光。不过不知道为什么。
标签: vba ms-word formatting