【问题标题】:Word VBA Find Using WildcardsWord VBA 使用通配符查找
【发布时间】:2020-08-30 06:05:30
【问题描述】:

我有一个单词表,它有 2000 行。每行包含一些 EXTENT,即 10 Sq 的平方码(Sq. Yds)的土地面积。码到 70000 平方码。我必须过滤它,需要 Extent 超过 500 Sq 的行。码。在 2000 行中,我想使用 VBA Word 宏中的通配符过滤这些行,这样我将获得 500 和更多的 Extent,使行小于 500 Sq。码。要查找的文本是字符和数字的组合。我想过滤查找“EXTENT: ([5-9][0-9][0-9])”。 “EXTENT: XXXX”(数字)。

Sub FilterExtentUsingWildcards()
  Application.ScreenUpdating = False
  Dim TblRng As Range, TmpRng As Range
  With ActiveDocument.Tables(1)
    Set TblRng = .Range: Set TmpRng = .Range
    With .Range
      With .Find
        .ClearFormatting
        .Replacement.ClearFormatting
        .Text = "<EXTENT:><space>([3-9][0-9][0-9])" 'FindText which is combination of
        'characters, space and Number
        .MatchWildcards = True                'i.e. "EXTENT: XXXX(number digits)
        .Replacement.Text = ""
        .Forward = True
        .Format = False
        .Wrap = wdFindStop
        .MatchCase = True
        .MatchWholeWord = True
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
        .Execute
      End With
      Do While .Find.Found
        If .InRange(TblRng) Then
          TmpRng.Collapse wdCollapseEnd
          TmpRng.FormattedText = .Rows(1).Range.FormattedText
          .Rows(1).Delete
        End If
        .Find.Execute
      Loop
    End With
    If .Rows.Count > TblRng.Rows.Count Then
      .Split .Rows(TblRng.Rows.Count + 1)
    End If
  End With
  Application.ScreenUpdating = True
End Sub

【问题讨论】:

  • 请编辑您的问题,以便更具可读性。正如它现在所显示的那样,很难对此提供帮助。
  • 欢迎来到 Stack Overflow!请使用tour 并通读help center,尤其是how to ask。你最好的选择是做你的研究,搜索关于 SO 的相关主题,然后试一试。在进行更多研究和搜索后,发布您的尝试Minimal, Complete, and Verifiable example,并具体说明您遇到的问题,这可以帮助您获得更好的答案。

标签: vba ms-word row wildcard word-table


【解决方案1】:

您的代码中的注释说您正在寻找“EXTENT: 300”及以上,但Find.Text 不包括空格。然后您打开 MatchWildcards 并在 7 行之后将其关闭。

我已将您的代码编辑如下:

Sub FilterExtentUsingWildcards()
  Application.ScreenUpdating = False
  Dim TblRng As Range, TmpRng As Range
  With ActiveDocument.Tables(1)
    Set TblRng = .Range: Set TmpRng = .Range
    With .Range
      With .Find
        .ClearFormatting
        .Replacement.ClearFormatting
        .text = "EXTENT: ([5-9][0-9][0-9])" 'FindText which is combination of characters, space and Number
        .MatchWildcards = True 'i.e. "EXTENT: XXXX(number digits)
        .Replacement.text = ""
        .Forward = True
        .Format = False
        .Wrap = wdFindStop
        .MatchCase = True
        .MatchWholeWord = True
        .MatchSoundsLike = False
        .MatchAllWordForms = False
        .Execute
      End With
      Do While .Find.Found
        If .InRange(TblRng) Then
          TmpRng.Collapse wdCollapseEnd
          TmpRng.FormattedText = .Rows(1).Range.FormattedText
          .Rows(1).Delete
        End If
        .Find.Execute
      Loop
    End With
    If .Rows.Count > TblRng.Rows.Count Then
      .Split .Rows(TblRng.Rows.Count + 1)
    End If
    'uncomment the next line if you want to delete the original table
    '.Delete
  End With
  Application.ScreenUpdating = True
End Sub

之前:

之后:

【讨论】:

  • 尊敬的 Timothy Rylatt 先生,感谢您立即回答我的问题。我已尝试按照您的建议编辑宏,但仍然无法正常工作。
  • @Sampath - 我测试了代码并且它可以工作,但是由于你没有在你的问题中描述你期望什么结果,我不知道它是否能达到你想要的效果。请查看How do I ask a good question? 并使用问题下方的编辑链接提供更多详细信息。
  • 感谢您对我的快速回复,先生。先生,我有一个单词表,它有 2000 行。每行包含一些 EXTENT,即 10 Sq 的平方码(Sq. Yds)的土地面积。码到 70000 平方码。我必须过滤它,需要 Extent 超过 500 Sq 的行。码。在 2000 行中,我想使用 VBA Word 宏中的通配符过滤这些行,这样我将获得 500 和更多的 Extent,使行小于 500 Sq。码。要查找的文本是字符和数字的组合。我想过滤查找“EXTENT:([5-9][0-9][0-9])”。 “EXTENT: XXXX”(数字位数)。
  • @Sampath 我已经编辑了我的答案,并为您提供了您日常工作的完整代码。当被要求提供更多详细信息时,请使用问题下方的编辑链接,而不是添加评论。
  • 非常感谢先生。它运行良好并获得了预期的结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-22
  • 1970-01-01
  • 2016-06-02
  • 2015-03-06
  • 2021-12-05
相关资源
最近更新 更多