【问题标题】:VBA to delete bookmark when Criteria not met in word documentVBA在word文档中不符合条件时删除书签
【发布时间】:2015-04-01 19:44:44
【问题描述】:

我有一个 Word 文档,其中我为文本行添加了书签 - 例如每行 10 行。我在 word 文档的不同页面上有 6 个这样的文本行,所以我在整个 Word 文档中总共有 6 个书签。现在给定 Excel 中的某些标准,例如 Coulmn A1:A6 是否有:

0,1,1,1,0,1

如果单元格 A1 为 0,则删除名为 sai1 的第一个书签,sai1.delete,如果单元格 A2 为 1,则不删除名为 sai2 的书签,如果单元格 A3 为 1,则不删除,但如果为 0,则删除以此类推;基本上我想要的是一个循环来为 100+ 一些书签在 excel 中给出 100+ 标准,它可能更多。除了 if-else 语句,我找不到更简单的方法。我将非常感谢您的帮助。 到目前为止,这是我的代码:

Set wtb1 = wdd.Bookmarks("D043").Range
Set wtb2 = wdd.Bookmarks("D044").Range
Set wtb3 = wdd.Bookmarks("D018").Range
Set wtb4 = wdd.Bookmarks("D046").Range
If Sheets("CPA").Cells(426, 7).Value = 0 Then
         wtb1.Delete
         ElseIf Sheets("CPA").Cells(427, 7).Value = 0 Then
               wtb2.Delete
         ElseIf Sheets("CPA").Cells(428, 7).Value = 0 Then
               wtb3.Delete
         ElseIf Sheets("CPA").Cells(429, 7).Value = 0 Then
               wtb4.Delete
End If

有没有 For 循环方法来解决这个问题?我也试过这样做:

 For k = 426 To 429
 If Sheets("CPA").Cells(k, 7).Value = 0 Then

     'Sheets("CPA").Cells(i, 10) = Sheets("CPA").Cells(i, 9).Value
     Value1 = Sheets("CPA").Cells(426, 9).Value
     Value1(i).Text.Delete
     i = i + 1
     End If
 Next

【问题讨论】:

    标签: vba ms-word bookmarks


    【解决方案1】:

    我知道这是一篇旧帖子,但这应该可以满足您的需求:

    Option Explicit
    
    Sub ManageBookmarks()
    
    Dim wdApp   As Object
    Dim wdDoc   As Object
    Dim wdName  As String
    Dim wdTemp  As Object
    Dim ws      As Worksheet
    Dim LastRow As Long
    Dim i       As Long
    
    Set ws = ActiveSheet
    wdName = "C:\Test.docx" 'Your file path here
    
    On Error Resume Next
    Set wdApp = GetObject(, "Word.Application")
    
    If wdApp Is Nothing Then
        On Error GoTo 0
        Set wdApp = CreateObject("Word.Application")
        Set wdDoc = wdApp.Documents.Open(wdName)
        wdApp.Visible = True
    Else
        On Error GoTo 0
        For Each wdTemp In wdApp.Documents
            If StrComp(wdTemp.FullName, wdName, vbTextCompare) = 0 Then
                Set wdDoc = wdTemp
                Exit For
            End If
        Next wdTemp
        If wdDoc Is Nothing Then
            Set wdDoc = wdApp.Documents.Open(wdName)
        End If
    End If
    
    With ws
        LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
        For i = 1 To LastRow
            If .Cells(i, 1).Value = 1 Then
                If wdDoc.Bookmarks.Exists("sai" & i) = True Then
                    wdDoc.Bookmarks("sai" & i).Delete
                End If
            End If
        Next i
    End With
    
    End Sub
    

    此代码假定您的 0 和 1 列表位于从第 1 行开始的 A 列中。

    将此代码放入您的 Excel 文件中,将您的工作表设置为您想要的内容,将您的文件名添加为 wdName,然后您应该一切就绪。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-17
      • 2023-04-09
      • 1970-01-01
      • 2015-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多