vba - 在 Word 文档中查找字符串的出现 - 如果在表格中找到字符串,则会出现问题
问题描述
希望能对这个问题有所帮助。我需要在 Word 文档中查找所有出现的字符串。当找到字符串时,会对其进行一些复杂的编辑。有时不需要编辑,字符串保持不变。处理完所有这些后,我继续寻找字符串的下一次出现。直到文档结束。
我写了一个例程来做到这一点:
- 它首先定义一个覆盖整个文档的范围 (myRange)。
- 然后执行 Find.Execute。
- 当发现一个事件时,我会进行编辑工作。
- 同时,myRange 已自动重新定义为仅覆盖找到的区域(这在 VBA WORD 文档 > FIND 对象中有详细记录)。
- 然后我重新定义 myRange 以覆盖从先前找到的区域末尾到文本末尾的文本部分。
- 我重复这个直到文档结束。
此例程运行良好,除非在 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
我有几种方法可以规避这个问题。但没有一个是简单的,更不用说“优雅”了。有人知道是否有避免此问题的“标准”/“经过验证”的方法吗?
非常感谢提前。
解决方案
推荐阅读
- dart - Flutter 执行顺序:build 和 initState
- jquery - 数据表为第 0 行第 0 列请求未知参数“0”
- java - 原始打字问题
- angularjs - ng-table过滤器完全匹配angularjs
- angular6 - IE11 中没有出现 Prime 图标
- c++ - 使用'extern“C”'时,是什么导致错误“预期字符串文字,但找到了用户定义的字符串文字”?
- mongodb - MongoDB 无法清除警告
- android - 使用 listview 时如何打开存储在 assets 文件夹中的 pdf 文件?
- vba - VBA - 替换单词表中的文本
- javascript - ReactJS 无法识别