1

这是我的代码,但它不会替换!首先,我将 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
4

1 回答 1

1

此代码将用“TEMP”替换“AnyText”的任何实例,然后用当前的(count of finds)mod 5 替换“TEMP”的任何实例:

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块中。

于 2012-11-28T18:34:46.017 回答