簡體   English   中英

Word VBA-通過“ AND”循環刪除書簽

[英]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

但是根據陣列的大小,循環解決方案可能會更好。

您可以使用Join()函數從所有書簽數組值中獲取一個字符串,然后使用Instr()函數檢查當前的書簽是否存在

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  

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM