Ich habe ein paar Probleme zu versuchen, herauszufinden, wie dies zu kodieren. Ich habe eine Teile-Tabelle mit 5 Spalten (Anzahl, Teilenummer, Beschreibung, Betrag und Gesamt). Wenn auf eine Befehlsschaltfläche geklickt wird, wird eine neue Zeile hinzugefügt. Jede neu hinzugefügte Zelle enthält ein Textinhalt-Steuerelement, das mit einem Namen und einer Nummer versehen ist, die bei jeder neuen Zeile um 1 erhöht werden. Zum Beispiel Qty3, Qty4, Qty5 usw. Die Spalten "Amount" und "Total" machen dasselbe. Ich habe die Kontrollen für den gesamten Inhalt gesperrt.Word VBA löschen Zeilen aus der Tabelle
Ich habe herausgefunden, dass die Inhaltskontrolle "Total" entsperrt werden muss, bevor die Zeile gelöscht werden kann. Jetzt wählt der Code das Inhaltssteuerelement "Total3" aus und löscht die Zeile erfolgreich, weil sie zuletzt in der Tabelle ist. Der Teil, den ich nicht herausfinden kann, ist, wie man den Code identifizieren kann, welcher "Total #" Inhaltskontrolle zuletzt in der Tabelle ist. Ich hoffe, das macht Sinn und ich kann alles klären, wenn es sein muss. Danke im Voraus!
'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
Danke für die Antwort. Ich habe Ihren Code eingefügt und erhalte diesen Laufzeitfehler: Das angeforderte Mitglied der Sammlung existiert nicht. Der Befehl CC setzen wird markiert. Ich frage mich, ob ich es an der falschen Stelle eingefügt habe? – BradBerger
Wo in Ihrem Code haben Sie die For-Schleife (erster Teil des Codes in meiner Antwort) eingefügt? Wenn Sie den Fehler erhalten, gehen Sie zum _Immediate_ Fenster (drücken Sie Strg + G), und geben Sie dann: '? ControlCount' Können Sie überprüfen, ob das Steuerelement (_Total_) tatsächlich existiert? – Prebsus
Es gab zwei Dinge, denke ich. Ich hatte es wahrscheinlich ursprünglich an der falschen Stelle. Ich habe die For-Schleife über den Unprotect-Code verschoben und den ControlCount um eins weniger als das Inhaltssteuerelement in der letzten Zeile überprüft. Ich habe gerade einen "+1" zum ControlCount in der Set CC-Tag-Auswahl hinzugefügt und es funktionierte wie ein Zauber. Ich habe auch "If ControlCount> 1 then" hinzugefügt, kurz bevor das CC by-Tag ausgewählt wurde. Wenn also auf die Schaltfläche geklickt wird, wenn keine Zeilen vorhanden sind, wird kein Fehler angezeigt. Vielen Dank für Ihre Hilfe! – BradBerger