使用VBA将自动图文集作为MS行中的行插入

问题描述 投票:1回答:2

我试图在MS Word 2016表单中创建一个“添加行”按钮,该按钮将在包含文本内容控件的表的底部添加另一行。

简单地添加一行不包括内容控件,复制前一行也将复制已添加到那些内容控件的任何文本,这两者都不是我想要的。

我在某处读到可以将未填充的行保存为自动图文集,然后将自动图文集作为新行插入。我只是无法找到如何做到这一点。我将未填充的行保存为自动文本,我只是不知道如何使用VBA将其添加到表的底部。

此外,表单将受到编辑保护。解锁表单所需的VBA代码然后重新锁定它我已经拥有。我现在正把它关掉,而我试图解决这个问题。

我尝试了下面的代码,但不断收到类型不匹配错误。

Private Sub AddInmate_Click()

ActiveDocument.Tables(2).Select
NormalTemplate.AutoTextEntries("Inmate_Row").Insert _
    Where:=ActiveDocument.Tables(2).Range.Rows.Last

End Sub

非常感谢您提供的任何帮助。

ms-word word-vba
2个回答
0
投票

尝试非常接近 - 它试图将新行插入“最后一行”或“最后一行”。诀窍是获取表的Range然后折叠它,以便目标插入点紧跟在表之后。当在现有表之后立即粘贴/插入表行时,在同一段落标记内,Word会自动将它们合并到现有表中。

Private Sub AddInmate_Click()
    Dim tmpl As Word.Template
    Dim rngTbl As Word.Range

    Set rngTbl = ActiveDocument.Tables(2).Range
    rngTbl.Collapse wdCollapseEnd
    Set tmpl = NormalTemplate
    tmpl.BuildingBlockEntries("Inmate_Row").Insert _
        Where:=rngTbl, RichText:=True
End Sub

0
投票

我采取的方法是使用如下代码:

 With Selection.Tables(1).Rows
    'Insert an empty paragraph after our table, then replace it with a replica of the last row
    With .Last.Range
      .Next.InsertBefore vbCr
      .Next.FormattedText = .FormattedText
    End With
    'Reset all content controls in the new last row
    For Each CCtrl In .Last.Range.ContentControls
      With CCtrl
        If .Type = wdContentControlCheckBox Then .Checked = False
        If .Type = wdContentControlRichText Or .Type = wdContentControlText Then .Range.Text = ""
        If .Type = wdContentControlDropdownList Then .DropdownListEntries(1).Select
        If .Type = wdContentControlComboBox Then .DropdownListEntries(1).Select
        If .Type = wdContentControlDate Then .Range.Text = ""
      End With
    Next
  End With

有关在类似于您的情况下实现此功能的完整ContentControlOnExit宏,请参阅:http://www.msofficeforums.com/word-vba/27809-code-add-new-row-table.html#post87989

© www.soinside.com 2019 - 2024. All rights reserved.