我試圖在MS Word文檔中查找關鍵詞的所有實例並更改其樣式。關鍵字存儲在一個數組中,我只想改變特定字的樣式。理想情況下,這將發生在我輸入時,但這並不重要。MS Word VBA - 查找單詞並更改其樣式
嘗試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 - 基於這個問題,在這裏How can I replace a Microsoft Word character style within a range/selection in VBA?:
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
嘗試3 - 自動更正;實際上沒有嘗試過:
作爲替代方法,我正在考慮使用自動更正。但是,我有超過100個關鍵字,並不知道如何將其自動添加到自動更正列表(我相當VBA文盲)。我會用這種方法看到的另一個問題是,我相信AutoCorrect是全球性的,而我只需要這樣做就可以用於特定的文檔。
Thanks @Graham Anderson。我剛纔很快就知道了這一點,但似乎並不奏效。我可能會混合一些東西,所以我稍後再試一次,在我手上多一點時間。 – pandita
你能描述發生了什麼嗎? –
感謝您在片段中複製。只是再試一次,它現在可以找到所有的實例。但是,如果我有這樣的內容:'只有word1應該重新格式化'它確實將格式應用於整個句子,而不是僅將格式應用於'word1'本身。也許我會先嚐試選擇這個詞並將格式應用於選擇?不知道這是否會更有意義... – pandita