计算VBA中“全部替换”所做的替换

时间:2018-10-16 16:35:06

标签: vba ms-word word-vba

我正在研究一个宏,该宏可以分析文档并在需要时修改样式。到目前为止,我的子团队之一使用FindExecute并使用循环来遍历具有已定义Style的所有段落。它工作得很好,并且很容易知道修改了多少次。 但是,看来.Execute Replace:=wdReplaceAll的效率要高得多,但是即使直接在Word中显示(使用 Ctrl + H )。

如何绕过此问题以计算更换次数?

非常感谢。

2 个答案:

答案 0 :(得分:1)

您可以结合使用Word的内置查找和替换以及使用正则表达式库(Microsoft VBScript正则表达式5.5)进行搜索和替换。

VBScript正则表达式不能搜索样式,只能搜索文本,但可以提供找到的匹配项数量。

因此,您首先要搜索并替换您感兴趣的样式(^ p +样式)的段落标记。您应将段落标记替换为经过修改的段落标记,例如“ ### ^ p”,请小心使用相同的样式替换。

然后,您可以使用正则表达式搜索并替换以找到段落标记修饰符,然后将其替换为空,从而恢复原始文本。正则表达式具有.Matches.Count方法,它将为您提供###的替换次数。

您可能会发现以下堆栈溢出帮助链接

How to Use/Enable (RegExp object) Regular Expression using VBA (MACRO) in word

答案 1 :(得分:0)

尝试根据以下内容进行尝试:

Sub Demo()
Application.ScreenUpdating = False
Dim i As Long
With ActiveDocument.Range
  With .Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Text = InputBox("What is the Text to Find")
    .Replacement.Text = ""
    .Forward = True
    .Wrap = wdFindStop
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchWildcards = False
    .MatchSoundsLike = False
    .MatchAllWordForms = False
    .Execute
  End With
  Do While .Find.Found
    i = i + 1
    .Collapse wdCollapseEnd
    .Find.Execute
  Loop
End With
Application.ScreenUpdating = True
MsgBox i & " instances found."
End Sub

上面的代码实际上并没有替代任何内容-它只是计算发现的实例。