我正在尝试查找MS Word文档中所有关键词的实例并更改其样式。这些关键词存储在数组中,我只想更改特定单词的样式。理想情况下,这将发生在我输入时,但这并非至关重要。
尝试1 - 基于录制宏和更改搜索词。
这会找到单行中的单词,但出于某些原因跳过段落内的单词,例如它会找到。
尝试1 - 基于录制宏和更改搜索词。
Sub Woohoo()
Dim mykeywords
mykeywords= Array("word1","word2","word3")
For myword= LBound(mykeywords) To UBound(mykeywords)
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
Selection.Find.Replacement.Style = ActiveDocument.Styles("NewStyle")
With Selection.Find
.Text = mykeywords(myword)
.Replacement.Text = mykeywords(myword)
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = True
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
Next
End Sub
这将改变包含这些文字的整个段落的样式。
尝试2 - 基于这个问题:如何在VBA中替换Microsoft Word字符样式范围/选择内的样式?
Sub FnR2()
Dim rng As Range
Dim mykeywords
mykeywords = Array("word1","word2","word3")
For nKey = LBound(mykeywords) To UBound(mykeywords)
For Each rng In ActiveDocument.Words
If IsInArray(rng, mykeywords(nKey)) Then
rng.Style = ActiveDocument.Styles("NewStyle")
End If
Next
Next
End Sub
这会找到单行中的单词,但出于某些原因跳过段落内的单词,例如它会找到。
Some text
word1
more text
但不包括
Some text before word1 means that the code above doesn't change the format
Word1 also isn't changed in this instance
第三种尝试 - 自动更正;实际上未尝试:
作为替代方法,我考虑使用自动更正。不过,我有100多个关键字,而且不知道如何将它们自动添加到自动更正列表中(我对VBA相当无知)。我认为这种方法的另一个问题是,我相信自动更正是全局的,而我只需要在特定文档中使用。
只有word1应该被重新格式化
,它会将格式应用于整个句子,而不仅仅是应用于word1
本身。也许我应该先选择单词,然后再将格式应用于所选内容?不确定是否更合理... - pandita