Vba Word宏-将固定文本替换为按一定步长递增的变量

Vba Word宏-将固定文本替换为按一定步长递增的变量,vba,ms-word,Vba,Ms Word,我有一个词VBA,我想让它更聪明一点。现在,这对我来说很好,但我仍然需要做一个手动步骤,我想取消这个步骤。宏将替换在选定内容中找到的字符串。这个字符串是“XXXX”,它被多次找到。我会提示用户为变量输入一个值,该值将替换“XXXX”。但是,所有引用都将替换为同一变量。我希望能够将每个实例增加2。因此,如果用户输入402,我希望宏在选择中找到第一个匹配项并将其替换为402,但下一个匹配项应替换为404、next 406等 我试图在宏中将“I”增加2,但宏继续执行,并用输入变量替换所有“XXXX”。

我有一个词VBA,我想让它更聪明一点。现在,这对我来说很好,但我仍然需要做一个手动步骤,我想取消这个步骤。宏将替换在选定内容中找到的字符串。这个字符串是“XXXX”,它被多次找到。我会提示用户为变量输入一个值,该值将替换“XXXX”。但是,所有引用都将替换为同一变量。我希望能够将每个实例增加2。因此,如果用户输入402,我希望宏在选择中找到第一个匹配项并将其替换为402,但下一个匹配项应替换为404、next 406等

我试图在宏中将“I”增加2,但宏继续执行,并用输入变量替换所有“XXXX”。任何帮助或指导都将不胜感激

这是我目前为止需要改进的宏

Sub my_convert_to_PROCESS_steps_addBLOCKs()
'
' my_convert_to_PROCESS_steps Macro
'
'
    
Dim aRange As Range
Dim i As Integer
Dim intRowCount As Integer
Dim MyInput As Variant

intRowCount = 1

'Set aRange = ActiveDocument.Range

'Selection.WholeStory
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
    
With Selection.Find
Do
    .Text = "XXXX " ' the word I am looking for
    .Execute
        If .Found Then
        MyInput = InputBox(" ", "Process Block Sequence", "Enter Block Starting Number (e.g., 402)")
           
           i = MyInput
            .Replacement.Text = "At block " & i & ", the device may "
            
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = True
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
         
            i = i + 2

        End If
                Selection.Find.Execute Replace:=wdReplaceAll

Loop While .Found

        End With
    End Sub

我能够回答我自己的问题。我以前也做过类似的工作。以下是新代码:

Sub my_convert_to_PROCESS_steps_addBLOCKs_new()
Application.ScreenUpdating = False
Dim i As Long
Dim MyInput As Variant

With ActiveDocument.Range
  With .Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Text = "XXXX"
    .Replacement.Text = ""
    .Format = False
    .Forward = True
    .Wrap = wdFindStop
    .MatchWildcards = True
    .Execute
  End With
         MyInput = InputBox(" ", "Process Block Sequence", "Enter Block Starting Number (e.g., 402)")
           
        i = MyInput
        
        Do While .Find.Found
       
    .Text = "At block " & i & ", the device may"
    .Collapse wdCollapseEnd
    .Find.Execute
    i = i + 2
  Loop
End With
Application.ScreenUpdating = True

End Sub