Word VBA删除带书签的表

时间:2015-01-22 19:49:12

标签: vba ms-word word-vba

我有一个包含多个表格的Word文档。其中一些有书签而另一些没有。有没有办法只在使用VBA的书签上的表上实现ConvertToText命令(无论书签名称是什么......我有超过40个书签)? 基本上,我试图摆脱书签表并保留文本。书签表插入INSIDE其他表没有书签。 我使用的是MS Word 2007。

提前致谢! SEB

1 个答案:

答案 0 :(得分:0)

是的,有一个非常简单的解决方案。 您需要遍历所有书签并检查其中是否有wdWithInTable。如果是这样,将整个表格转换为文本。这是给你的代码:

Sub ConvertTablesWithBookmarks()


    Dim BK As Bookmark
    For Each BK In ActiveDocument.Bookmarks
        If BK.Range.Information(wdWithInTable) Then
            'uncomment for test just to check if working as expected
            'BK.Range.Tables(1).Select

            BK.Range.Tables(1).ConvertToText
        End If
    Next

End Sub

在下面的评论中有其他解释后,您可以提供一些解决问题的提示。

查找书签所在的表格:

Activedocument.bookmarks(1).Range.Tables(1)

要查找上表中的第一个表,请使用此代码

Activedocument.bookmarks(1).Range.Tables(1).Tables(1)

但我认为您可以在父表中包含几个表。因此我建议运行这样的循环(伪代码,需要根据您的需要进行调整):

dim parentTable as Table
dim BK as Bookmark     'or a reference to one from loop above
set BK = Activedocument.bookmarks(1)
set parentTable = BK.Range.Tables(1)
dim i as integer
for i=1 to parentTable.Tables.Count
    if parenttable.tables(i).range.start >=bk.range.start and _
       parenttable.tables(i).range.end <=bk.range.end Then
       'here we know that tables(i) is inside bookmark 1 (BK)

       parenttable.tables(i).converttotext
     end if
next i

我没有机会对它进行测试,但希望它能够正常运作。