每10个单词替换一次

时间:2017-03-21 03:37:44

标签: vba word-vba

我试图用下划线替换Word文档中的每个第10个单词,该下划线等于单词的长度。这是我迄今为止尝试过的代码,但它似乎并没有接近工作。我是VBA的新手。我觉得我能够使用FOR EACH循环在单词之间移动,但是我在选择对象时遇到了麻烦

Sub Macro1()
'
' Macro1 Macro
'
'
    i = 0
    For Each aword In ActiveDocument.Words
        ' Selection = aword
        i = i + 1
        aword.Select
        If (i Mod 10) = 0 Then

            blanks = ""
            For Counter = 0 To Len(aword)
                blanks = blanks + "_"
            Next Counter
            Word.Selection.TypeText (blanks)
            aword.Cut
        End If
    Next aword
End Sub

另外,VBA是最简单的语言可用于在文字处理文档中执行此类操作吗?有一个更简单的吗?我试图帮助一位最后使用Wang VS词汇表决策处理语言https://en.wikipedia.org/wiki/Wang_Laboratories#Wang_OIS编码的学生

1 个答案:

答案 0 :(得分:1)

如果您刚刚开始,只要您直接使用Microsoft Office文档,VBA可能是最简单的。主要原因是该功能已嵌入到程序中,因此您可以从应用程序中轻松测试脚本。

一旦取出aWord,您的代码几乎可以正常工作。请注意,某些内容被视为您可能不期望的Word集合的一部分。例如,带有空格的逗号被视为“单词”。与期间相同。在下面的代码中,我测试了这两个条件,但您可能需要更多测试,具体取决于您的数据。

最后我需要稍微改变你的循环,因为一旦你修改了集合,for each循环中的迭代器就会重置你修改的内容。因此,在您的示例中,第一个单词后面的每个第九个单词都会被更改。

i = 1
For Each aword In ActiveDocument.Words
    If (aword <> ". " And aword <> ", ") Then
        i = i + 1
        aword.Select

        If (i Mod 11) = 0 Then
            blanks = ""
            For Counter = 1 To Len(aword) - 1
                blanks = blanks + "_"
            Next Counter
            blanks = blanks + " "
            Word.Selection.TypeText (blanks)
        End If
    End If
Next aword