循环一个句子
Loop through a sentence
我想找一个里面有蓝色文字的句子,select整个句子,把蓝色的字一个一个去掉。我的代码在转到 With 语句之前只删除句子中的第一个蓝色单词。
我正在寻找类似这样的伪代码:
而 objSelectionChange.Sentences(1).Find.Font.Color = wdColorBlue
对于当前 selected 句子
,这将是一个嵌套的 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
在循环中更新objSelectionChange,因为第一次替换时,它可以改变
当您进行替换时,.Replacement.Text
只是一个没有格式的纯文本字符串。任何后续的蓝色单词都被 color=Automatic 单词(可能是黑色)替换。这就是为什么 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
我想找一个里面有蓝色文字的句子,select整个句子,把蓝色的字一个一个去掉。我的代码在转到 With 语句之前只删除句子中的第一个蓝色单词。
我正在寻找类似这样的伪代码:
而 objSelectionChange.Sentences(1).Find.Font.Color = wdColorBlue
对于当前 selected 句子
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
在循环中更新objSelectionChange,因为第一次替换时,它可以改变
当您进行替换时,.Replacement.Text
只是一个没有格式的纯文本字符串。任何后续的蓝色单词都被 color=Automatic 单词(可能是黑色)替换。这就是为什么 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