Word VBA:通过循环ActiveDocument.Words来修改单词会创建一个无限循环

时间:2014-09-22 10:59:07

标签: vba word-vba

我想逐字循环浏览Word文档。我目前正在使用ActiveDocument.Words集合,这看起来非常简单。但是,有一个奇怪的问题是,如果我改变一个单词的内容,内部指针不会移动到下一个单词,而是再次指向刚被修改的同一个单词。在某些情况下,这会造成一种情况,即例程无限期地在单个字循环中陷入困境。

示例代码:

Sub LoopWords()
    Dim wd As Range
    i = 0
    For Each wd In ActiveDocument.Words
        If wd.Text = "foo " Then
            wd.Text = wd.Text & "bar "
        End If

        'Prevent infinite loop:
        i = i + 1
        If i > 99 Then
            Exit For
        End If
    Next wd
End Sub

例如,在包含短语“这里有一些foo”的文档中使用此宏。结果“有一些foo bar bar bar bar bar bar bar bar bar bar bar bar bar bar bar ...”等等。

那么为什么它的行为会像这样呢? 如何逐字循环并在必要时修改文本?

1 个答案:

答案 0 :(得分:0)

你的宏正在取代" foo"用" foo bar"并使其阅读" foo"作为一个新词一遍又一遍。

而不是:

wd.Text = wd.Text & "bar "

尝试:

wd.InsertAfter "bar "