0
我在尝试弄清楚如何对其进行编码时遇到了一些麻烦。我有一个5列的零件表(数量,零件号,描述,数量和总数)。当单击一个命令按钮时,会添加一个新行。每添加一个新行,每个新添加的单元格都包含一个文本内容控件,该控件的名称和编号将加1。例如,Qty3,Qty4,Qty5等。“金额”和“总计”列的功能相同。我将Total内容控件锁定。Word VBA从表中删除添加的行
我发现在可以删除该行之前,必须解锁“Total”内容控件。现在,代码选择“Total3”内容控件,并成功删除行,因为它是表中的最后一行。我无法弄清楚的部分是如何让代码识别哪个“Total#”内容控件是表中的最后一个。我希望这是有道理的,如果需要的话,我可以澄清任何事情。提前致谢!
'Add Part Button
Private Sub CommandButton1_Click()
Dim oTable As Table
Set oTable = ActiveDocument.Tables(8)
MakePartsRow oTable
lbl_Exit:
Set oTable = Nothing
Exit Sub
End Sub
'Delete Part Button
Private Sub CommandButton11_Click()
Dim oTable As Table
Dim CC As ContentControl
Set oTable = ActiveDocument.Tables(8)
Dim lngRow As Long
Dim Index As Long
Dim sName1 As String
If Not ActiveDocument.ProtectionType = wdNoProtection Then
ActiveDocument.Unprotect
End If
If oTable.Rows.Count > 2 Then
Set CC = ActiveDocument.SelectContentControlsByTag("Total3").Item(1)
With CC
.LockContents = False
.Delete True
End With
oTable.Rows.Last.Delete
End If
ActiveDocument.Protect wdAllowOnlyFormFields, NoReset:=True, _
Password:=""
End Sub
Sub MakePartsRow(oTable As Table)
Dim oNewRow As Row
Dim oRng As Range
Dim oCell As Cell
Dim iCell As Integer
Dim oCC As ContentControl, oCC1 As ContentControl, oCC2 As ContentControl
Dim lngCell1 As Long, lngCell2 As Long
lngCell1 = 0: lngCell2 = 0
If Not ActiveDocument.ProtectionType = wdNoProtection Then
ActiveDocument.Unprotect
End If
Set oNewRow = oTable.Rows.Add
oNewRow.Range.Font.Bold = False
For iCell = 1 To 5
Set oCell = oNewRow.Cells(iCell)
Set oRng = oCell.Range
oRng.End = oRng.End - 1
Select Case iCell
Case 1
Set oCC = oRng.ContentControls.Add(wdContentControlText)
With oCC
.Range.Text = "1"
.SetPlaceholderText , , ("Qty")
.Tag = "Qty" & oCell.RowIndex
End With
Case 2
Set oCC = oRng.ContentControls.Add(wdContentControlText)
With oCC
.SetPlaceholderText , , ("Part No.")
End With
Case 3
Set oCC = oRng.ContentControls.Add(wdContentControlText)
With oCC
.SetPlaceholderText , , ("Description")
End With
Case 4
Set oCC = oRng.ContentControls.Add(wdContentControlText)
With oCC
.Range.Text = ""
.SetPlaceholderText , , ("Amount")
.Tag = "Amount" & oCell.RowIndex
End With
Case 5
Set oCC = oRng.ContentControls.Add(wdContentControlText)
With oCC
.SetPlaceholderText , , ("Total")
.Tag = "Total" & oCell.RowIndex
End With
End Select
Next iCell
oNewRow.Cells(4).Select
ActiveDocument.Protect wdAllowOnlyFormFields, NoReset:=True, _
Password:=""
End Sub
感谢您的回复。我插入了你的代码,并得到了这个运行时错误:集合的请求成员不存在。 Set CC命令正在高亮显示。我想知道我是否将它插入错误的地方? – BradBerger
你的代码在哪里插入了For循环(我的回复中的代码的第一部分)? 当你得到错误时,进入_Immediate_窗口(按Ctrl + G),然后输入:'?ControlCount' 你可以检查该控件(_Total_)是否确实存在? – Prebsus
我认为有两件事情正在进行。我最初可能是在错误的地方。我将Un循环代码上方的For循环移动到了最后一行的内容控件处,并将ControlCount检查为一个。我刚刚在Set CC标记选择中的ControlCount上添加了一个“+1”,它像一个魅力一样工作。我还添加了“如果ControlCount> 1,那么”就在它通过标记选择CC之前,所以如果在没有行时点击按钮,它不会出错。谢谢你的帮助! – BradBerger