这是我的代码,但它没有替代! 首先我将AnyText更改为TEMP,之后我使用Array TargetList的元素替换TEMP,但不能替换TEMP。
Sub First()
'
' First Macro
Dim i As Long
i = 0
Dim j As Long
Dim myWord As String
Dim msg As String
myWord = "TEMP"
TargetList = Array("AnyText", "NewWord1", "NewWord2", "NewWord3", "NewWord4")
For Each myStoryRange In ActiveDocument.StoryRanges
With myStoryRange.Find
.Text = "AnyText"
.Replacement.Text = myWord
.Wrap = wdFindContinue
.Execute Replace:=wdReplaceAll
End With
Next myStoryRange
For Each myStoryRange In ActiveDocument.StoryRanges
With myStoryRange.Find
Do While .Execute(FindText:=myWord, Forward:=True) _
= True
j = j + 1
Loop
msg = msg & "The string " & myWord & _
" found " & j & " times."
End With
msg = msg & vbCrLf & vbCrLf
MsgBox msg
Next myStoryRange
For Each myStoryRange In ActiveDocument.StoryRanges
With myStoryRange.Find
Do While j > -1
.Text = "TEMP"
.Replacement.Text = TargetList(i)
msg = msg & "The string " & myWord & _
" j = " & j & " i = " & i & TargetList(i) & " times."
msg = msg & vbCrLf & vbCrLf
MsgBox msg
j = j - 1
i = i + 1
If i = 5 Then
i = 0
End If
Loop
.Wrap = wdFindContinue
.Execute Replace:=wdReplaceAll
End With
Next myStoryRange
End Sub
答案 0 :(得分:1)
此代码将使用“TEMP”替换“AnyText”的任何实例,然后将“TEMP”的任何实例替换为当前(count of finds)
mod 5:
Sub First()
Dim i As Long
i = 0
Dim myWord As String
myWord = "TEMP"
TargetList = Array("AnyText", "NewWord1", "NewWord2", "NewWord3", "NewWord4")
With ActiveDocument.Content.Find
.Text = "AnyText"
.Replacement.Text = myWord
.Wrap = wdFindContinue
.Execute Replace:=wdReplaceAll
End With
With ActiveDocument.Content.Find
.Text = "TEMP"
.Replacement.Text = TargetList(i)
.Wrap = wdFindContinue
Do While .Execute(Replace:=wdReplaceOne) = True
i = i + 1
If i = 5 Then i = 0
.Replacement.Text = TargetList(i)
Loop
End With
End Sub
请注意,这将更改“AnyText”的所有实例 - 即使它们是较大单词的一部分(例如“myAnyTextWord”将更改为“myTEMPWord”)。如果您只想搜索整个字词,请将.MatchWholeWord = True
添加到每个With
块。