循环一句话

时间:2015-09-24 16:33:18

标签: vba loops ms-word do-while

我想在其中找到一个带有蓝色文字的句子,选择整个句子并逐个删除蓝色单词。我的代码只删除句子中的第一个蓝色单词,然后再转到With语句。

我正在寻找类似伪代码的东西:
 当objSelectionChange.Sentences(1).Find.Font.Color = wdColorBlue
对于当前选择的句子,它将是一个嵌套的while循环

Do While True
objSelectionChange.Find.Forward = True
objSelectionChange.Find.Format = True
objSelectionChange.Find.Font.Color = wdColorBlue
objSelectionChange.Find.Execute
If objSelectionChange.Find.Found Then
    strg2 = objSelectionChange.Sentences(1).Text
    count = count + 1
    ReDim strgArray(count)
    strgArray(count) = objSelectionChange.Text
    MsgBox strgArray(count) & " Located In Array Index # " & count
    MsgBox strg2
    strg3 = Replace(strg2, strgArray(count), "")
    strg3 = Replace(strg3, "  ", " ")
    strg3 = Mid(strg3, 1, Len(strg3) - 2)
    MsgBox strg3
Else
    Exit Do
End If
    Set objRangeOrig = objDocOrig.Content
    '''''Search the string in the original manual'''''
    With objRangeOrig.Find
    .MatchWholeWord = False
    .MatchCase = False
    .MatchPhrase = True
    .IgnoreSpace = True
    .IgnorePunct = True
    .Wrap = wdFindContinue
    .Text = strg3
    .Replacement.Text = Left(strg2, Len(strg2) - 2)
    .Execute Replace:=wdReplaceOne
    End With
Loop

2 个答案:

答案 0 :(得分:0)

执行替换时,.Replacement.Text只是一个没有格式的纯文本字符串。任何后续的蓝色单词都被color = Automatic words(可能是黑色)替换。这就是为什么Find在第一次更换后无法找到任何东西。

这是一种无需查找和替换即可完成此操作的方法。我认为它可以实现你想要的,但你可能需要根据你的情况进行调整。

Dim rSearch As Range

Set rSearch = ThisDocument.Range

Do
    rSearch.Find.Forward = True
    rSearch.Find.Format = True
    rSearch.Find.Font.Color = wdColorBlue
    rSearch.Find.Execute
    If rSearch.Find.Found Then
        rSearch.Delete wdWord, 1
    Else
        Exit Do
    End If
Loop

答案 1 :(得分:-1)

更新循环中的objSelectionChange,如第一次替换时,它可以更改