VBA Word我想在一个循环中用这个+不同的单词替换一个单词

时间:2012-11-27 19:32:53

标签: vba ms-word word-vba

这是我的代码,但它没有替代! 首先我将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

1 个答案:

答案 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块。