Vba 代码卡在循环中,怎么了?

Vba 代码卡在循环中,怎么了?,vba,ms-word,Vba,Ms Word,我有这个代码,它陷入了一个循环。我有类似的代码,它在文档中循环,每个单词只更改一次。当我运行此子脚本时,它会粘附在第一个实例上,并一次又一次地替换文本 我希望它找到单词“因此”,如果前面的“单词”=;若要跳过,请更改为“因此(需要加入;)” 我错过了什么/做错了什么 提前谢谢 Sub test() Dim wrd As Range For Each wrd In ActiveDocument.Words If InStr(1, wrd, "therefore") <>

我有这个代码,它陷入了一个循环。我有类似的代码,它在文档中循环,每个单词只更改一次。当我运行此子脚本时,它会粘附在第一个实例上,并一次又一次地替换文本

我希望它找到单词“因此”,如果前面的“单词”=;若要跳过,请更改为“因此(需要加入;)”

我错过了什么/做错了什么

提前谢谢

 Sub test()

 Dim wrd As Range
 For Each wrd In ActiveDocument.Words
    If InStr(1, wrd, "therefore") <> 0 Then
        If InStr(1, wrd.Previous(Unit:=wdWord, Count:=1).Text, ";") <> 0 Then
        Else
            wrd.Text = "therefore (needs joined with ;)"
        End If
    End If
Next
End Sub
子测试()
变暗wrd As范围
对于ActiveDocument.Words中的每个wrd
如果InStr(1,wrd,“因此”)为0,则
如果InStr(1,wrd.Previous(单位:=wdWord,计数:=1).Text,“;”)为0,则
其他的
wrd.Text=“因此(需要加入;)”
如果结束
如果结束
下一个
端接头

例如,试试这个——我怀疑你是在跳回上一个单词,并且一遍又一遍地检查它,单词DOM是一个非常奇怪的单词

Sub test() 

 Dim wrd As Range 
 For Each wrd In ActiveDocument.Words 
    If InStr(1, wrd, "therefore") <> 0 Then 
        If InStr(1, wrd.Previous(Unit:=wdWord, Count:=1).Text, ";") = 0 Then 
            wrd.Text = "therefore (needs joined with ;)" 
        End If 

        wrd.Next Unit:=wdWord, Count:=1
    End If 
Next 
End Sub 
子测试()
变暗wrd As范围
对于ActiveDocument.Words中的每个wrd
如果InStr(1,wrd,“因此”)为0,则
如果InStr(1,wrd.Previous)(单位:=wdWord,计数:=1)。Text,“;”)=0,则
wrd.Text=“因此(需要加入;)”
如果结束
工作。下一个单位:=wdWord,计数:=1
如果结束
下一个
端接头

您是否在调试模式下查看了代码以了解发生了什么?调用wrd.Previous不会将选择指针移回上一个单词?看起来您正在访问一个单词,然后将所选内容移回一个单词并再次检查。尝试在wrd.Previous()之后调用wrd.Next()。如果要替换文本,最好使用文档的.Find方法、定义的范围或选择。我相信现在发生的事情是,你输入了没有经过“For Each”循环的新词,它在这组新词中找到了“因此”,并将其替换,然后用你刚刚输入的“因此”新词再次输入。为什么不在Word中记录一个Find and Replace宏呢?它的意思是
wrd。Next(Unit:=wdWord,Count:=1)
是无效语法?您是否遇到相同的错误?请尝试不使用括号,vb仅在方法返回值为时才需要括号used@Charleh或者当显式使用
Call
时,您为什么要这样做?;-)可能是咖啡太多了?VB让我不寒而栗。。。。尽管如此,老板还是用它。。在编写新应用程序时!啊!