我正在研究一个宏,该宏可以分析文档并在需要时修改样式。到目前为止,我的子团队之一使用Find
和Execute
并使用循环来遍历具有已定义Style
的所有段落。它工作得很好,并且很容易知道修改了多少次。
但是,看来.Execute Replace:=wdReplaceAll
的效率要高得多,但是即使直接在Word中显示(使用 Ctrl + H )。
如何绕过此问题以计算更换次数?
非常感谢。
答案 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
上面的代码实际上并没有替代任何内容-它只是计算发现的实例。