如果没有办法在其中您可以找出要自动元首你可能有一次写的一切。为此创建一个单独的函数。它可能看起来像这样: -
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