2014-09-22 54 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 "