如果沒有辦法在其中您可以找出要自動元首你可能有一次寫的一切。爲此創建一個單獨的函數。它可能看起來像這樣: -
Private Function SearchCriteria() As String()
Dim Fun(6) As String ' Fun = Designated Function return value
' The number of elements in the Dim statement must be equal to
' the number of elements actually declared:
' observe that the actual number of elements is one greater
' than the index because the latter starts at 0
Fun(0) = "Text 1"
Fun(1) = "Text 2"
Fun(2) = "Text 3"
Fun(3) = "Text 4"
Fun(4) = "Text 5"
Fun(5) = "Text 6"
Fun(6) = "Text 7"
SearchCriteria = Fun
End Function
您可以根據需要添加任意數量的元素。從理論上講,如果它們在文檔中是唯一的就足夠了。我將在下面添加一些實際問題。使用下面的代碼來測試上述功能。
Private Sub TestSearchCriteria()
Dim Crits() As String
Dim i As Long
Crits = SearchCriteria
For i = 0 To UBound(Crits)
' prints to the Immediate Window:
' select from View tab or press Ctl+G
Debug.Print Crits(i)
Next i
End Sub
現在您已準備好嘗試實際處理您的文檔。這是代碼。它不會影響任何變化。這只是測試和準備的基礎設施。
Sub ChangeTextFormat()
Dim Crits() As String
Dim Rng As Range
Dim Fnd As Boolean
Dim i As Long
Crits = SearchCriteria
For i = 0 To UBound(Crits)
' find the Text in the document
Set Rng = ActiveDocument.Content
With Rng.Find
.ClearFormatting
.Execute FindText:=Crits(i), Forward:=True, _
Format:=False, Wrap:=wdFindStop
Fnd = .Found
End With
If Fnd = True Then
With Rng
Debug.Print .Text
' .MoveStart wdWord, -2
' With .Font
' .Italic = True
' .Bold = True
' End With
End With
Else
Debug.Print "Didn't find " & Crits(i)
End If
Next i
End Sub
該過程的前半部分將使用與您從測試過程中已知的相同類型的循環找到文檔中的每個搜索條件。但是現在文本被輸入Find
方法,該方法將找到的文本分配到Rng
範圍。如果找到該物品,您現在可以通過Rng
的名稱找到它。
子的後半部分處理搜索結果。如果找到文本,找到的文本(即Rng.Text
)將打印到立即窗口,否則原始文本Crits(i)
帶有「未找到」。
如果找到文本,您想要爲其分配樣式。但在你這樣做之前,你應該處理你找到的文本和你想要格式化的文本之間的區別。這種差異可能是物理的,就像你沒有在標準中寫出整個文本的長度,或者是技術性的,比如不包括段落標記。在我的上面的子代中,只有隨機代碼(通過前面兩個單詞擴展Rng
並將所有內容格式化爲粗體斜體)。考慮這個代碼佔位符。
爲了您的目的,這樣的代碼可能會完成這項工作。 .Paragraphs(1).Style = Head1
其實,這是一個相當不同的問題,我敦促你不要急於獲得這個結果。您現在擁有的部分需要先進行徹底測試。
你有兩個任務。一個是找到一個文本,另一個是應用一個樣式。由於風格相同,所以您可以放心地專注於指定文本。如果你的谷歌的「找到所有的事件」,你會發現代碼來循環你的文本。你應該做這個工作。然後,您可以將格式應用於您找到的每一段文字。注意我選擇的單詞。我說「應用格式」,而不是用代碼所建議的格式替換文本。這是行不通的。我還努力避免使用「選擇」這個詞,因爲使用Range對象會更好。 – Variatus
確定循環位是有幫助的 - 但是我試圖找到的代碼都是唯一的。有關如何編寫宏以查找多個不重複的字符串值的任何想法?或者,它可以輸入我希望查找的所有值,但只需輸入一次,然後執行樣式代碼。 – VBAmazing