在Word

时间:2016-10-03 11:39:34

标签: vba word-vba

所以我有一个我设定的范围,我们称之为myRange。我还有一个短字符串数组,我们称之为searchArray

我想在myRange内搜索每个字符串的所有实例,并更改文字颜色。

我遇到的问题是每次执行搜索后如何重置范围。

这就是我目前的尝试:

Dim searchRange as Range

For i = 1 to UBound(searchArray)
  Set searchRange = myRange
  With searchRange.Find
    .Text = searchArray(i)
    .Forward = True
    .Wrap = wdFindStop
    .Execute

    While .Found
      .Parent.Font.Color = RGB(20,20,20)
      .Execute
    Wend
  End With
Next i

然而,执行查找不仅会更改searchRange,还会更改myRange,这样当我循环回来时,我不会搜索我想要的内容。

如何在每次循环中将searchRange重置为原始myRange

1 个答案:

答案 0 :(得分:2)

而不是:

Set searchRange = myRange

这样做:

Set searchRange = myRange.Duplicate

这样,searchRange将独立于myRange,如Range.Duplicate上的文档中所述:

  

通过复制范围对象,您可以更改重复范围的起始或结束字符位置,而无需更改原始范围。