根据需要多次运行word VBA脚本的最简单方法是什么?

根据需要多次运行word VBA脚本的最简单方法是什么?,vba,ms-word,Vba,Ms Word,我知道问题的标题不清楚,所以希望我能澄清: 考虑以下VBA脚本(由M.Paige编写): 这将用“:”替换“:”的每个实例 问题是我有任意数量的空间,必须多次运行它以消除“:”的所有实例 那么,修改此VBA脚本以使其只运行一次,从而在删除冒号之前产生任意数量的空格的最佳方法是什么呢 VBA脚本应该是递归的吗 我应该搜索文档以确定冒号前的空格数,然后运行VBA脚本多次吗 在for循环中运行VBA脚本,比如说,100次就可以捕获所有内容吗 最容易实施的解决方案是什么?试试以下方法: Sub rem_

我知道问题的标题不清楚,所以希望我能澄清:

考虑以下VBA脚本(由M.Paige编写):

这将用“:”替换“:”的每个实例

问题是我有任意数量的空间,必须多次运行它以消除“:”的所有实例

那么,修改此VBA脚本以使其只运行一次,从而在删除冒号之前产生任意数量的空格的最佳方法是什么呢

VBA脚本应该是递归的吗

我应该搜索文档以确定冒号前的空格数,然后运行VBA脚本多次吗

在for循环中运行VBA脚本,比如说,100次就可以捕获所有内容吗

最容易实施的解决方案是什么?

试试以下方法:

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