使用通配符在doc中查找字符串;返回完整字符串VBA

时间:2013-10-15 08:04:41

标签: excel excel-vba search ms-word word-vba vba

我需要做的是搜索word文档中的金额,然后将金额返回给程序以供用户验证。我知道金额以“$”开头,小数点后面有两位数(每个文件只有一个金额)。搜索返回true,就像我想要的那样,但我如何从word文档中拉出完整的数字(分配给变量)

以下代码(Excel 2010);欢呼声。

With wdDoc.Content.Find
   .Text = "$*.??"
   .MatchWildcards = True
   If .Execute Then
      'would be verified here
   Else
      'etc
   End If
End With

编辑: 我设法让以下工作;

   With wdApp.Selection.Find
      .Text = "$*.??"
      .Wrap = wdFindAsk
      .Forward = True
      .MatchWildcards = True
      If .Execute Then
         debug.print wdApp.Selection.Text
      Else
         debug.print "Not Found"
      End If
   End With

唯一不利的是,如果用户在此搜索运行时设法选择了不同的Word文档,则无法找到结果,因为选择已更改。有没有办法专门搜索代码中早期打开的活动文档? ( “wdDoc”)。使用wdDoc.Content似乎没有任何方法可以返回字符串。

Edit2:有没有办法使用Word.Document而不是Word.Application从搜索中返回文本?

2 个答案:

答案 0 :(得分:1)

试试这个

With ActiveDocument.Content.Find
    .Text = "$*.??"
    .Replacement.Text = ""
    .Forward = True
    .Wrap = wdFindAsk
    .MatchWildcards = True
    If .Execute Then
        Debug.Print Selection.Range.Text
    Else
        Debug.Print "not Found"
    End If
End With

<强>后续

试试这个(试过并测试过)

Sub Sample()
    ActiveDocument.Content.Select
    With Selection.Find
        .Text = "$*.??"
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .MatchWildcards = True
        If .Execute Then
            Debug.Print Selection.Range.Text
        Else
            Debug.Print "not Found"
        End If
    End With
End Sub

答案 1 :(得分:1)

您可以使用Range对象来引用找到的文本。

此外,如果存在迷路$*.??,则查找模式$可以在您的文档中找到许多内容,而不是您想要的内容。

您可以使用此模式精确查找美元金额

$[0-9]{1,}.[0-9]{2}

Sub Demo()
    Dim wdDoc As Document
    Dim oRng As Range

    ' Set reference to required doc
    Set wdDoc = ActiveDocument

    ' ....

    Set oRng = wdDoc.Content
    With oRng.Find
        .Text = "$[0-9]{1,}.[0-9]{2}"
        .Wrap = wdFindAsk
        .Forward = True
        .MatchWildcards = True

        If .Execute Then
           Debug.Print oRng
        Else
          'etc
        End If
    End With
End Sub