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