VBA Microsoft Word-序列号
我已经手动完成了这项工作,我想用一个从1到word文档中ZXZ最后一次出现的序列号替换ZXZ的每个实例 基本上,我试图实现的是在特定word文档中运行word VBA宏,其中VBA宏开始从文件顶部搜索ZXZ的每个匹配项,将ZXZ的第一个匹配项替换为“1”,然后依次将下一个匹配项替换为“2”,直到在word文档中找到最后一个ZXZ word文档示例可能包含: 元素ZXZ 元素ZXZ ... 元素ZXZ 在运行vba word宏后,我想以以下内容结束: 要素1 要素2 ... 要素25 我已经用这段代码完成了这项工作,但我想做“while”循环,或者找到ZXZ的每个匹配项,并用从“1”开始的序列号替换它VBA Microsoft Word-序列号,vba,ms-word,Vba,Ms Word,我已经手动完成了这项工作,我想用一个从1到word文档中ZXZ最后一次出现的序列号替换ZXZ的每个实例 基本上,我试图实现的是在特定word文档中运行word VBA宏,其中VBA宏开始从文件顶部搜索ZXZ的每个匹配项,将ZXZ的第一个匹配项替换为“1”,然后依次将下一个匹配项替换为“2”,直到在word文档中找到最后一个ZXZ word文档示例可能包含: 元素ZXZ 元素ZXZ ... 元素ZXZ 在运行vba word宏后,我想以以下内容结束: 要素1 要素2 ... 要素25 我已经用这段
“我基本上一直重复上面的代码,直到达到25个,这通常是每个文档中存在的ZXZ实例的数量。可能不是最有效的方法。。。但这是:
Option Explicit
Function countOccurrences(someString As String) As Integer
Dim iCount As Long
If someString > "" Then
Application.ScreenUpdating = False
With Selection
.HomeKey Unit:=wdStory
With .Find
.ClearFormatting
.Text = someString
Do While .Execute
iCount = iCount + 1
Selection.MoveRight
Loop
End With
End With
Application.ScreenUpdating = True
End If
countOccurrences = iCount
End Function
Sub my_prov_MDList()
Dim counter As Long
For counter = 1 To countOccurrences("ZXZ")
Selection.MoveUp Unit:=wdScreen, count:=7
Selection.HomeKey Unit:=wdLine
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "ZXZ"
.Replacement.Text = CStr(counter)
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute
With Selection
If .Find.Forward = True Then
.Collapse Direction:=wdCollapseStart
Else
.Collapse Direction:=wdCollapseEnd
End If
.Find.Execute Replace:=wdReplaceOne
If .Find.Forward = True Then
.Collapse Direction:=wdCollapseEnd
Else
.Collapse Direction:=wdCollapseStart
End If
.Find.Execute
End With
Next
End Sub
刚刚添加了一个函数来计算“ZXZ”出现的次数,因此可以使用该函数作为循环限制更有效:
Sub Demo()
Application.ScreenUpdating = False
Dim i As Long
With ActiveDocument.Range
With .Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = "ZXZ"
.Replacement.Text = ""
.Format = False
.Forward = True
.Wrap = wdFindStop
.MatchWildcards = True
.Execute
End With
Do While .Find.Found
i = i + 1
.Text = i
.Collapse wdCollapseEnd
.Find.Execute
Loop
End With
Application.ScreenUpdating = True
MsgBox i & " instances found."
End Sub
啊,我看到有一点是从好东西中提取出来的!库比,这很有魅力!谢谢你的帮助。嗨,这是非常有效和快速的!非常感谢您提供此解决方案并提供所有帮助!!!
Sub Demo()
Application.ScreenUpdating = False
Dim i As Long
With ActiveDocument.Range
With .Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = "ZXZ"
.Replacement.Text = ""
.Format = False
.Forward = True
.Wrap = wdFindStop
.MatchWildcards = True
.Execute
End With
Do While .Find.Found
i = i + 1
.Text = i
.Collapse wdCollapseEnd
.Find.Execute
Loop
End With
Application.ScreenUpdating = True
MsgBox i & " instances found."
End Sub