当Word文档中未满足条件时,VBA删除书签

时间:2015-04-01 19:44:45

标签: vba ms-word bookmarks

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

0,1,1,1,0,1

当IF单元格A1为0时,删除名为sai1的第一个书签,sai1.delete,如果单元格A2为1,则不删除名为sai2的书签,如果单元格A3为1则不删除,但如果0删除等等;基本上我想要的是一个循环,在excel中给出100多个标准的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

1 个答案:

答案 0 :(得分:0)

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

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的文件名,您应该全部设置。