我不是 VBA 专家,但我正在尝试做一些非常简单的事情。我正在尝试从 Word 文档中的每个段落中删除前导空格。
这是我的 VBA 代码:
Function RemoveLeadingSpaces()
Dim apara As Paragraph
Application.ScreenUpdating = False
For Each apara In ActiveDocument.Paragraphs
'apara.Range.Text = Trim(apara.Range.Text)
Debug.Print apara.Range.Text
Next apara
Application.ScreenUpdating = True
End Function
当我取消注释替换文本的行时,我开始遇到一些奇怪的行为。循环变得无限,并且只会一遍又一遍地应用/替换第一个项目/段落。如果我注释,则调试会按预期打印所有段落。
我做错什么了?
通过添加两行调试代码,您可以观察到第 5 行(覆盖段落分隔符)不仅修改了循环变量
apara
,还修改了Paragraph collection
。在下一次循环迭代中,将再次选择更新后的第一个段落,从而形成无限循环。请尝试删除前导空格而不影响段落分隔符。
顺便说一句,如果函数没有返回值,则可以使用
Sub
过程而不是Function
。您甚至不需要宏!您只需要一个通配符查找/替换,其中:
但是,如果您坚持使用宏:
对于较长的文档,这也比您的代码要快得多。此外,与您的代码不同,查找/替换不会弄乱粗体、下划线、斜体等字符格式。