【问题标题】:Add a number of tables to a bookmark in Word VBA while maintaining and expanding the bookmark在 Word VBA 中向书签添加多个表格,同时维护和扩展书签
【发布时间】:2020-05-19 07:18:46
【问题描述】:

我正在尝试使用 Word VBA 创建一些自动化并寻求一些建议。

我在文档中有一个书签。我想要做的是调用一些 VBA,它会转到该书签并创建许多表,可能是 1,也可能是 50,具体取决于某些变量。

我想维护那个书签,使它覆盖整个新的表格部分,这样如果有人再次运行宏,表格就会被删除并很好地重新创建。

到目前为止,我有一些代码可以在书签处创建表格并重新创建它,但它似乎是在第一个单元格中创建书签作为表格嵌套。

谁能帮帮我?

Private Sub InsertTableInBookmark(BookmarkName As String)

Debug.Print "[INFO] Started Private Sub InsertTableInBookmark"

Dim objRng As Range
Dim objTable As Table

Selection.GoTo what:=wdGoToBookmark, Name:=BookmarkName
Selection.Expand wdParagraph

ActiveDocument.Tables.Add Range:=Selection.Range, NumRows:=9, NumColumns:=4, DefaultTableBehavior:=wdWord9TableBehavior
ActiveDocument.Bookmarks.Add BookmarkName, Selection.Range

Debug.Print "[INFO] Finished Private Sub InsertTableInBookmark"

End Sub

谢谢。

【问题讨论】:

    标签: vba ms-word


    【解决方案1】:

    试试:

    Private Sub InsertTableInBookmark(BmkNm As String, t As Long)
    Dim i As Long, BmkRng As Range, Tbl As Table
    With ActiveDocument
      If .Bookmarks.Exists(BmkNm) Then
        Set BmkRng = .Bookmarks(BmkNm).Range
        For i = 1 To t
          Set Tbl = .Tables.Add(Range:=BmkRng.Characters.Last, _
            NumRows:=9, NumColumns:=4, DefaultTableBehavior:=wdWord9TableBehavior)
          With BmkRng
            .End = Tbl.Range.End
            If i < t Then
              .Characters.Last.Next.InsertBefore vbCr & vbCr
              .End = .End + 2
            End If
          End With
        Next
        .Bookmarks.Add BmkNm, BmkRng
      End If
    End With
    Set BmkRng = Nothing
    End Sub
    

    请注意,我在 sub - t - 中添加了另一个参数,表示要插入的表数。

    【讨论】:

    • 谢谢@macropod。这当然似乎让我有一些方法。我在这段代码中看到的是,插入的表格似乎从书签正上方的 H2 标题中获取格式,因此表格在每个单元格中都有 1.1、1.2、1.3 等。在第二次运行时,我还看到 H2 标题直接在表丢失标题中的第一个字符之后。我的文档结构是这样的: 1.1 Heading [AUTOMATION BOOKMARK]
    • 代码按照您的要求完全执行,允许您一次性输入任意数量的表格。这些表格从您附加的任何段落中获取其基础格式。只需将书签附加到使用您希望应用于表格的任何样式格式化的空段落 - 或之后更改样式。如果您要进行“第二次运行”,那么您需要首先在最后一个带有书签的表格之后插入两个空段落。研究代码。显然,如果你想删除任何现有的书签表,你需要为此添加代码 - 你没有要求。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多