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

3
我需要做的是在Word文档中搜索美元金额,然后将金额返回给程序以供用户验证。我知道金额以“$”开头,并以小数点后两位数字结尾(每个文档只有一个金额)。搜索返回了我想要的结果,但是我该如何从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

唯一的缺点是,如果用户在此搜索运行时选择了不同的单词文档,则它将无法找到结果,因为选择已更改。有没有办法只搜索代码中先前打开的活动文档(“wdDoc”)?使用wdDoc.Content似乎没有任何返回字符串的方法。
编辑2:是否有办法使用Word.Document而不是Word.Application从搜索中返回文本?
2个回答

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

抱歉问个题外话:我该如何编辑以下内容以使搜索能够找到以“ARC”或“MEC”开头的目标文本?.Text = “(ARC|MEC)[1-4][1-9]{2}” - Diaa

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
使用 Selection.Range.Text 会出现错误 "450:参数数量错误或无效的属性分配"。 - Benjamin Dover

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接