Vba 搜索和替换问题无限循环

Vba 搜索和替换问题无限循环,vba,replace,ms-word,Vba,Replace,Ms Word,我不确定是什么导致了这个问题。我的目标很简单——我想用一个递增的数字替换一些文本“abc.XXXX”,这样它就可以被转换为“abc.0001”、“abc.0002”、“abc.0003”等等。发生的情况是,对于某些文档,脚本将永远运行,而不会替换任何内容(至少不可见),也不会给出错误 这是我目前的密码 With ActiveDocument.Content With .Find .ClearFormatting .Replaceme

我不确定是什么导致了这个问题。我的目标很简单——我想用一个递增的数字替换一些文本“abc.XXXX”,这样它就可以被转换为“abc.0001”、“abc.0002”、“abc.0003”等等。发生的情况是,对于某些文档,脚本将永远运行,而不会替换任何内容(至少不可见),也不会给出错误

这是我目前的密码

With ActiveDocument.Content
        With .Find
            .ClearFormatting
            .Replacement.ClearFormatting
            .text = ABC_123.XXXX
            .Forward = True
            .Wrap = wdFindContinue
            .Format = False
            .MatchWildcards = False
            .Execute Replace:=wdReplaceOne
        End With

        While .Find.Found = True
            count = count + 1
            lastReqNr = lastReqNr + 1
            .text = ABC_123. & Right(String(4, "0") & lastReqNr, 4)
            .Collapse wdCollapseEnd
            .Find.Execute Replace:=wdReplaceOne
        Wend
    End With

对于某些文档,此代码工作得非常好,但某些文档会导致问题。在每种情况下都正确填写了变量。原因可能是我经常使用修改跟踪吗?

我的坏习惯。没有提到跟踪更改在文档中处于活动状态。如果搜索文本被某人删除,它将被修改。宏将用必须替换的文本替换(当“轨迹更改”处于活动状态时)将创建另一个修订的文本

简单但不完美的解决方案是将远期价值更改为

Forward = False

有没有一种方法可以提供一个例子,说明它运行到无限循环中的情况?还有,
S_发现
到底等于什么?嘿,当然
S_FIND
等于例如“ABC_123.XXXX”,如果文本类似于:
ABC_123.XXXX\n(原:ABC_003.004)
,则会出现无限循环。我认为不应该出现infinte循环,因为替换内容会用ABC_123.0001覆盖当前值,而ABC_123.XXXX与ABC_123.XXXX不匹配。我试图更详细地了解循环发生的时间:每当要替换的文本后面有一个段落时,就会发生循环。然后word将
ABC_123.XXXX
替换为
ABC_123.0001ABC_123.0002ABC_123.0003…
,依此类推。有人知道为什么段落/换行符会导致这种行为吗?