Word VBA:如何选择找到的文本而不是光标所在的位置

时间:2017-02-10 11:27:21

标签: vba ms-word find word-vba

这可能很简单,但我无法让它发挥作用。

我需要搜索我的文档,找到包含字符串'alog'的单词并添加'ue'。例如,'catalogs' - > '目录'。

以上工作正常,但我无法使下一位工作:如果找到的字符串在'log'之后已经有'ue',我不想添加另一个'ue'。

从宏访问的子程序如下。我已经尝试将以下行添加到'while execute'部分,但'selection'总是证明是光标碰巧的那个词。

With Selection

    .Expand unit:=wdWord

End With

我如何i)选择找到的范围的内容和ii)将两个字符的新选择展开以查看这两个字符是否为“ue”?

非常感谢。

    Sub do_replace2(old_text As String, new_text As String, Count_changes As Integer)

    ' Replaces 'log' with 'logue'
    ' Ignores paragraphs in styles beginning with 'Question'

    Dim rg As Range
    Set rg = ActiveDocument.Range

    With rg.Find
    .Text = old_text
    While .Execute
        If Left(rg.Paragraphs(1).Style, 8) <> "Question" Then
            rg.Text = new_text
                With ActiveDocument.Comments.Add(rg, "Changed from '" & old_text & "'")
                .Initial = "-logs"
                .Author = "-logs"
                End With
                Count_changes = Count_changes + 1
           End If
     rg.Collapse wdCollapseEnd
    Wend
    End With
    End Sub

1 个答案:

答案 0 :(得分:0)

我不太确定我是否按照问题的第一部分“我如何选择找到的范围的内容”。 rg变量已包含搜索结果。如果您想选择它,只需使用rg.Select即可。这可能在调试时很有用(因此您可以看到当您单步执行代码时Range的位置),但实际上没有任何其他理由使用 {{{ 1}}来自你问题的代码中的对象。您可以改为使用Selection对象。

至于问题的第2部分“我如何......用两个字符扩展新选择”,您需要做的就是在Range的{​​{1}}属性中添加2。由于您只是将其用于测试(并且因为.End方法可能很狡猾),请在Range副本上进行测试:

.Find