VBA:为什么Range.Find.Execute取消选择Word文档中的文本?

时间:2014-12-29 21:26:05

标签: vba ms-word selection word-vba

为什么这个VBA代码((子的初始部分)修改了Word文档中的可见选择?我没有修改任何选择。根据MSDN描述:

  

“如果你从Range对象获得了Find对象,那么   找到符合查找条件的文本后,选择不会更改,   但是Range对象被重新定义。   (摘自:Find Object (Word)

所以下面的代码应该只修改Range,而不会影响选择...

Sub SelectTarget()
    Dim MyRange As Range
     
    Set MyRange = Selection.Range
    With MyRange.Find 'Searches for _AM or _PM  (_ is a space)
        .ClearFormatting
        .MatchWildcards = True
        .Text = " [AP]M"
        .Execute
    End With
  

这是一个文档的屏幕截图,其中选择了一些文本(我称之为可见选择):

Visible text selection right before executing the <code>Range.Find</code> code

但是使用F8逐步执行代码可以看到在.Execute行之后,文档中的可见选择消失,文本背景全部为白色,根本没有选择,甚至没有插入点。

我尝试在代码中输入Replacement.ClearformattingReplace = ""行,以防止先前的查找/替换干扰,但它不会改变任何内容...... 有任何想法吗?

1 个答案:

答案 0 :(得分:1)

我不确定为什么将MyRange设置为选择范围而不是选择范围,但也许Word认为这两者是同义词。尝试

Set MyRange = Selection.Range.Duplicate

因此,对MyRange的更改根本不会影响Selection.Range。