场景:
包含一系列句子(字符串)的 Word 文档。可能有多达 30 个可能的字符串(长度从 5 到 20 个字不等)。该文档将仅包含这些字符串的选择。
目标:
搜索文档、查找特定字符串的每次出现并在每次出现后插入特定文本代码(例如“(ACWD2553)”)的宏。这对集合中的所有其他字符串重复,每个不同的字符串都有自己不同的代码。某些字符串不会出现在文档中。字符串可以位于文档正文和表格单元格中。然后,该宏将应用于具有不同字符串选择的其他文档。
我已经使用 selection.find、content.find、target.list、insertafter 等尝试了很多天,但只有一种情况,但仍然遇到很多问题(例如,仅在一个实例中插入,或者代码重复插入直到 Word 冻结) .
奖励功能###
能够选择要搜索的字符串集(可能多达 60 组)及其对应的代码。每个文档将只有一组中的字符串。
我的一个想法是将字符串列在一个列中(在 Excel 中?),并将匹配的代码列在第二列中。然后,宏将在文档中搜索列表中的每个字符串(在列表末尾停止,因为字符串的数量在集合之间有所不同)在下一列的单元格中找到匹配的代码,然后插入每次出现的代码word doc 中的字符串。当需要不同的集合时,可以将 Excel 文件与包含相关字符串集合的文件交换,但文件名相同。或在不同工作表上的一个 Excel 文件中的所有集合和在 Word(用户窗体?)中输入的选项卡名称,这会强制搜索相关集合。该文件将位于网络驱动器上。
不确定这是否比 Ben Hur 大,最后一点会很好,但我也可以从模板代码手动输入原始代码中的字符串。
编辑了这篇文章以包括我对代码的糟糕尝试。请参阅下面的评论。我刚刚意识到我可以在这个窗格中添加代码。尝试了以下迭代的各种迭代,但没有一个效果很好,也没有达到我的要求。我知道存在明显的错误,正如我在下面所说的那样,我已经玩弄了代码,并通过将零碎混合在一起使其变得更糟。
Sub Codes()
Dim range As range
Dim i As Long
Dim TargetList
TargetList = Array("This is sentence 1", "This is string 2 which could be twenty words in length", "This is string three, there could be thirty more strings to search") ' put list of terms to find here
For i = 0 To UBound(TargetList)
Set range = ActiveDocument.range
With range.Find
.Text = TargetList(i)
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
Do While .Execute(Forward:=True) = True
range.Find.Execute
range.InsertAfter Text:=" (ACWD1234)"
Loop
End With
Next
End Sub