VBA Microsoft Word-序列号

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 我已经用这段

我已经手动完成了这项工作,我想用一个从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”开始的序列号替换它


“我基本上一直重复上面的代码,直到达到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