我试图在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
非常感谢您提供的任何帮助。
尝试非常接近 - 它试图将新行插入“最后一行”或“最后一行”。诀窍是获取表的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
我采取的方法是使用如下代码:
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