使用Selection.Extend函数

时间:2016-04-27 16:06:34

标签: vba ms-word word-vba word-2007 word-2003

我已使用Selection.Extend选择从StartEnd的特定文字现在,文字可从以下代码中选择:

Selection.Find.ClearFormatting
        With Selection.Find
        .Text = "Start"
        .Forward = True
        .Wrap = wdFindStop
        End With
    Selection.Find.Execute
    If Selection.Find.Found = False Then
    Else

    Selection.Extend

    Selection.Find.ClearFormatting
    With Selection.Find
        .Text = "End"
        .Forward = True
        .Wrap = wdFindStop
   End With
   Selection.Find.Execute
   End If
选择之后我想找到" ABCD"在选定的文本中通过以下代码:

   Selection.Find.ClearFormatting
        With Selection.Find
            .Text = "ABCD"
            .Forward = True
            .Wrap = wdFindStop
        End With
    Selection.Find.Execute
    If Selection.Find.Found = True Then
    MsgBox ("Found")
    Else
    MsgBox ("Not Found")
    End If

但不是找到它而是将选择范围扩展到ABCD所在的位置。

所以我的问题是如何摆脱以前的选择以及selection.Find.Execute ABCDStart内的End

2 个答案:

答案 0 :(得分:2)

我刚刚测试过,.Wrap wdFindStop.Forward = True。光标位于查找的末尾,您找到.Forward = True。既然你在最后,直到停止,它将找不到它。

测试文本:

  

启动ABCD结束

改变之后我才开始工作:

.Forward = False

Selection.Find

<{1>} "ABCD"

中的

修改

然后

If Selection.Find.Found = True Then
    Selection.Collapse wdCollapseEnd
    Selection.Expand wdWord
Else
    MsgBox("Not Found")
End If

答案 1 :(得分:1)

我认为对于Selection.Extend实际上做了什么有一些误解,你可能想在语言参考中阅读它。它在UI中模拟键盘命令,通过预定义的&#34;跳转&#34;来扩展当前选择。

根据您的描述,我了解您要在文档中找到第一个搜索词(&#34;开始&#34;)。 如果存在,请在文档末尾搜索第二个搜索字词(&#34;结束&#34;)。如果找到了,则在第二个搜索词的两个术语之间进行搜索。

最好使用三个RANGES,每个搜索词一个。像这样:

Dim rngStart as Word.Range, rngEnd as Word.Range, rngTarget as Word.Range
Dim bFound as Boolean
Set rngStart = ActiveDocument.Content
bFound = rngStart.Find.Execute(FindText:="Start", Forward:=True, Wrap:=wdFindStop)
If bFound Then
  Set rngEnd = rngStart.Duplicate
  bFound = rngEnd.Find.Execute(FindText:="End", Forward:=True, Wrap:=wdFindStop)
  If bFound Then
    rngStart.End = rngEnd.End 'Extend first Found to include second Found
    Set rngTarget = rngStart.Duplicate
    bFound = rngTarget.Find.Execute(FindText:="ABCD", Forward:=True, Wrap:=wdFindStop)
    If bFound Then
        MsgBox "Found"
    Else
        MsgBox "Not found"
    End If
  End If
End If