Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 每十个字替换一次_Vba_Ms Word - Fatal编程技术网

Vba 每十个字替换一次

Vba 每十个字替换一次,vba,ms-word,Vba,Ms Word,我试图用与单词长度相等的下划线替换word文档中的每10个单词。这是我到目前为止已经尝试过的代码,但它似乎不太奏效。我是VBA新手。我觉得我可以使用FOR-EACH循环在单词之间移动,但在处理选择对象时遇到了问题 Sub Macro1() ' ' Macro1 Macro ' ' i = 0 For Each aword In ActiveDocument.Words ' Selection = aword i = i + 1 aw

我试图用与单词长度相等的下划线替换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 Glossary Decision Processing language编写代码的学生如果您刚刚开始,那么无论您何时直接使用Microsoft Office文档,VBA都可能是最简单的。主要原因是该功能已经嵌入到程序中,因此您可以从应用程序中轻松测试脚本

一旦去掉一个字,你的代码几乎可以工作。请注意,某些东西被视为单词集合的一部分,这是您可能无法预料的。例如,一个逗号,后面有一个空格,它被当作一个单词处理。一段时间也一样。在下面的代码中,我针对这两种情况进行了测试,但您可能需要更多的测试,具体取决于数据的外观

最后,我需要稍微更改一下循环,因为一旦修改了集合,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

为什么是i Mod 11而不是i Mod 10?当你修改单词时,循环迭代器返回到该单词的开头,因此你刚刚修改的单词会被计数。最简单的修复方法是将其增加到i Mod 11,这样它将在您刚刚修改的单词之后查找10个单词,而不是在i Mod 10中查找9个单词。由于我更改了Mod,我还必须将起始I值调整1,以便更改的第一个单词仍然是第10个单词,而不是第11个单词。