根据需要多次运行word VBA脚本的最简单方法是什么?
我知道问题的标题不清楚,所以希望我能澄清: 考虑以下VBA脚本(由M.Paige编写): 这将用“:”替换“:”的每个实例 问题是我有任意数量的空间,必须多次运行它以消除“:”的所有实例 那么,修改此VBA脚本以使其只运行一次,从而在删除冒号之前产生任意数量的空格的最佳方法是什么呢 VBA脚本应该是递归的吗 我应该搜索文档以确定冒号前的空格数,然后运行VBA脚本多次吗 在for循环中运行VBA脚本,比如说,100次就可以捕获所有内容吗 最容易实施的解决方案是什么?试试以下方法:根据需要多次运行word VBA脚本的最简单方法是什么?,vba,ms-word,Vba,Ms Word,我知道问题的标题不清楚,所以希望我能澄清: 考虑以下VBA脚本(由M.Paige编写): 这将用“:”替换“:”的每个实例 问题是我有任意数量的空间,必须多次运行它以消除“:”的所有实例 那么,修改此VBA脚本以使其只运行一次,从而在删除冒号之前产生任意数量的空格的最佳方法是什么呢 VBA脚本应该是递归的吗 我应该搜索文档以确定冒号前的空格数,然后运行VBA脚本多次吗 在for循环中运行VBA脚本,比如说,100次就可以捕获所有内容吗 最容易实施的解决方案是什么?试试以下方法: Sub rem_
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时才退出。此循环重复调用.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…循环而不是循环
With myRange.Find
.Text = " :"
.Replacement.Text = ":"
Do
.Execute Replace:=wdReplaceAll, Forward:=True, Wrap:=wdFindContinue
Loop While .Found
End With
但这看起来很难看(并且是不公平的),因为.Execute
行被使用了两次。如果您不喜欢我的方法,我建议您至少检查一下“Do…Loop While”。也就是说,无限循环方法没有错。我个人不喜欢无限循环。我有一段时间没有考虑过做…循环。也不是一个超级粉丝,但我认为这将是一个很好的使用案例@roryap。肯定更好。谢谢@roryap。Do…循环While
解决了每次迭代时设置.Text
和替换.Text
的问题。
With myRange.Find
.Text = " :"
.Replacement.Text = ":"
Do
.Execute Replace:=wdReplaceAll, Forward:=True, Wrap:=wdFindContinue
Loop While .Found
End With