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

时间:2014-10-29 17:07:08

标签: vba ms-word word-vba

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

考虑以下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次捕获所有内容吗?

实施最简单的解决方案是什么?

2 个答案:

答案 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