我正在VBA Word中编写一个宏,它正在从excel文件复制数据并使用预定义的书签粘贴Word文件中的数据。 我在Word中有两组不同的书签,根据要执行的操作,宏首先删除该特定操作不需要的书签,然后粘贴剩余书签所在的数据。
到目前为止,代码在两种情况下都有效,但是,不是一个熟练的程序员,我必须为特定的任务编写几行才能工作,我希望你的帮助"清理"这部分代码,使它更少"复杂"如果需要进行未来的更改,也更容易修改。下面你会发现代码,正如我所说的那样有效,但它并不漂亮。
Dim arr As Variant
Dim bookmark As Bookmarks
Dim i As Long
arr = Array("a", "b", "c")
For Each bookmark In ActiveDocument.Bookmarks
If bookmark <> arr(0) And bookmark <> arr(1) _
And bookmark <> arr(2) Then
bookmark.Delete
Else
bookmark.Select 'this is just to give a "useless" alternative to vba
End If
Next bookmark
我这里只放了3个数组元素,而实际上有很多元素,但想法是自动化&#34; AND&#34;函数和范围如下:如果Word文件中已存在的每个书签都不同于数组中的任何元素&#34; arr&#34;然后必须删除该书签,否则没有任何反应。 因此,我不想对数组的每个元素使用一个AND函数,而是希望循环遍历数组,以便将每个书签与数组中的所有元素进行比较,并且只有在删除了不同的元素时才会。我不知道是否有办法循环&#34; AND&#34;函数以某种方式,但向数组中添加更多元素意味着添加相同数量的&#34; AND&#34;。
希望能够尽力而为,你可以帮助我。
提前多多感谢!
答案 0 :(得分:2)
循环数组,并使用布尔值跟踪是否找到。
Dim arr As Variant
Dim bookmark As Bookmarks
Dim i As Long
Dim bln As Boolean
arr = Array("a", "b", "c")
For Each bookmark In ActiveDocument.Bookmarks
bln = False
For i = LBound(arr) To UBound(arr)
If bookmark = arr(i) Then
bln = True
Exit For
End If
Next i
If Not bln Then bookmark.Delete
Next bookmark
答案 1 :(得分:0)
如果您只有几个元素,而不是使用&#34;如果&#34;并且可以通过数组循环使用Select Case
Select bookmark
Case Is <> "a","b","c"
bookmark.Delete
Case Else
'Whatever code
End Select
但是根据数组的大小,循环解决方案可能会更好。
答案 2 :(得分:0)