我试图用下划线替换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编码的学生
答案 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