使用VBA

时间:2018-09-05 20:51:22

标签: ms-word word-vba

我正在尝试在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

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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