Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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
Arrays 单词VBA-循环通过;及;删除书签_Arrays_Vba_Excel_Ms Word_Bookmarks - Fatal编程技术网

Arrays 单词VBA-循环通过;及;删除书签

Arrays 单词VBA-循环通过;及;删除书签,arrays,vba,excel,ms-word,bookmarks,Arrays,Vba,Excel,Ms Word,Bookmarks,我正在用VBA Word编写宏,该宏从excel文件复制数据,并使用预定义的书签将数据粘贴到Word文件中。 Word中有两组不同的书签,根据要执行的操作,宏首先删除该特定操作不需要的书签,然后将数据粘贴到剩余书签所在的位置 到目前为止,代码在这两种情况下都能工作,但是,作为一个不熟练的程序员,我不得不为一个特定的任务写几行代码才能工作,我希望您能帮助“清理”这部分代码,使其不那么“复杂”,并且在将来需要更改时更容易修改。下面你会发现,正如我所说,代码是有效的,但并不漂亮 Dim arr As

我正在用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  
Dim arr作为变型
将书签暗显为书签
我想我会坚持多久
arr=数组(“a”、“b”、“c”)
对于ActiveDocument.Bookmarks中的每个书签
如果书签arr(0)和书签arr(1)_
和书签arr(2)然后
书签。删除
其他的
书签。选择“这只是为了给vba提供一个“无用”的替代品
如果结束
下一个书签
我在这里只放了3个数组元素,虽然实际上有很多,但想法是自动执行“AND”函数,范围如下:如果Word文件中已经存在的每个书签都不同于数组“arr”中的任何元素,则必须删除该书签,否则不会发生任何事情。 因此,我不想对数组中的每个元素都使用AND函数,而是想在数组中循环,这样每个书签都会与数组中的所有元素进行比较,并且只有在删除不同元素时才会进行比较。我不知道是否有办法以某种方式循环“AND”函数,但向数组中添加更多元素意味着添加相同数量的“AND”

希望你已经筋疲力尽,你能帮助我


提前多谢

循环数组,并使用布尔值跟踪是否找到

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

如果您只有几个元素,那么可以使用Select Case,而不是使用“If”和通过数组的循环

Select bookmark
Case Is <> "a","b","c"
bookmark.Delete
Case Else
'Whatever code
End Select
选择书签
案例为“a”、“b”、“c”
书签。删除
其他情况
“不管是什么代码
结束选择
但是根据数组的大小,循环解决方案可能更好。

您可以使用函数从所有书签数组值中获取字符串,然后使用函数检查当前书签是否存在

Dim arr As Variant
Dim bookmark As Bookmark

arr = Array("a", "b", "c")

For Each bookmark In ActiveDocument.Bookmarks
    If Instr(Join(arr, "|"), bookmark) = 0 Then bookmark.Delete
Next bookmark