[英]Word VBA - Loop through “AND” to delete bookmarks
我在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個元素,而實際上有3個元素,但是其思想是使“ AND”功能自動化,范圍如下:如果Word文件中已經存在的每個書簽都不同於ANY元素刪除數組“ 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
如果只有幾個元素,則可以使用“ If”和遍歷數組的方式來使用Select Case
Select bookmark
Case Is <> "a","b","c"
bookmark.Delete
Case Else
'Whatever code
End Select
但是根據陣列的大小,循環解決方案可能會更好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.