首页 > 解决方案 > 在 Word 文档中查找字符串的出现 - 如果在表格中找到字符串,则会出现问题

问题描述

希望能对这个问题有所帮助。我需要在 Word 文档中查找所有出现的字符串。当找到字符串时,会对其进行一些复杂的编辑。有时不需要编辑,字符串保持不变。处理完所有这些后,我继续寻找字符串的下一次出现。直到文档结束。

我写了一个例程来做到这一点:

此例程运行良好,除非在 TABLE 中找到字符串的出现。那么就不可能重新定义 myRange 以覆盖从上一个找到的末尾到文本末尾的区域。在重新定义中,VBA 坚持包含先前找到的区域(实际上是整个 TABLE)。因此,当我迭代时,它会一次又一次地找到相同的事件并永远循环。

以下是我例程的简化版本。它没有做任何事情,只是为了说明问题。如果您在出现字符串“abc”的文档上运行它,您会看到它运行愉快地完成。但是,如果您的文档在 TABLE 中出现“abc”,则例程将永远循环。

Sub moreTests()

Dim myRange As Range
Dim lastCharPos As Integer

Set myRange = ActiveDocument.Range
lastCharPos = myRange.End

myRange.Find.ClearFormatting

With myRange.Find
    .Text = "abc"
End With

While myRange.Find.Execute = True
    'An occurrence of "abc" has been found
    MsgBox (myRange.Text)
    MsgBox ("Range starts at : " & myRange.Start & "; Range ends at : " & myRange.End)
    'myRange has been redefined to encompass only the found region (the "abc" string)
    'Perform whatever editing work is needed on the string myRange.Text ("abc")
    'Now redefine myRange to cover the remainder of the document
    myRange.Start = myRange.End
    myRange.End = lastCharPos
    MsgBox ("Range starts at : " & myRange.Start & "; Range ends at : " & myRange.End)
Wend


End Sub 'moreTests

我有几种方法可以规避这个问题。但没有一个是简单的,更不用说“优雅”了。有人知道是否有避免此问题的“标准”/“经过验证”的方法吗?

非常感谢提前。

标签: vba

解决方案


推荐阅读