2014-09-22 92 views
0

我想循环逐个Word文档。我目前使用的ActiveDocument.Words集合看起来很简单。但是,有一个奇怪的问题,如果我改变一个单词的内容,内部指针不会移动到下一个单词,而是再次指向刚被修改的同一单词。而且在某些情况下,这会产生一种情况,例行程序无限循环地停留在单个单词上。Word VBA:通过循环修改单词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吧台吧台吧台吧台吧台吧台吧台吧台吧台吧台吧...”等等。

那么为什么地球上它的行为如此呢?
如何在需要时逐字循环并修改文字?

+1

你不应该修改内'用于each'环......这些循环像getter和他们都应该返回任何东西info/data ...我不确定这是什么原因,但... – 2014-09-22 11:01:19

回答

0

您的宏正在用“foo bar”替换“foo”,并导致它将“foo”作为一个新词反复读取。

相反的:

wd.Text = wd.Text & "bar " 

尝试:

wd.InsertAfter "bar "