我知道问题标题不清楚,所以希望我能澄清一下:
考虑以下VBA脚本(由M. Paige编写):
Sub rem_space()
Set myRange = ActiveDocument.Content
With myRange.Find
.Text = " :"
.Replacement.Text = ":"
.Execute Replace:=wdReplaceAll, Forward:=True, _
Wrap:=wdFindContinue
End With
End Sub
这将取代"的每个实例。 :"与":"。
问题是我有任意数量的空格,并且必须多次运行才能消除"的所有实例。 :"
那么,修改这个VBA脚本以使其必须只运行一次的最佳方法是什么,在删除冒号之前会产生任意数量的任意空格。
VBA脚本应该是递归的吗?
我应该搜索文档以确定冒号之前的大多数空格,然后多次运行VBA脚本吗?
在for循环中运行VBA脚本会说100次捕获所有内容吗?
实施最简单的解决方案是什么?
答案 0 :(得分:1)
试试这个:
Sub rem_space()
Dim myRange As Range
Set myRange = ActiveDocument.Content
Do While True
With myRange.Find
.Text = " :"
.Replacement.Text = ":"
If (Not .Execute(Replace:=wdReplaceAll, Forward:=True, _
Wrap:=wdFindContinue)) Then Exit Do
End With
Loop
End Sub
它与Do While True
无限循环,然后仅在对.Execute
的调用返回false时退出。
答案 1 :(得分:1)
这一个重复了对.Execute
的调用,但并不依赖于无限循环。
With myRange.Find
.Text = " :"
.Replacement.Text = ":"
.Execute Replace:=wdReplaceAll, Forward:=True, Wrap:=wdFindContinue
Do While .Found
.Execute Replace:=wdReplaceAll, Forward:=True, Wrap:=wdFindContinue
Loop
End With
或者可能是Do...Loop While
循环。
With myRange.Find
.Text = " :"
.Replacement.Text = ":"
Do
.Execute Replace:=wdReplaceAll, Forward:=True, Wrap:=wdFindContinue
Loop While .Found
End With