Consulting

Results 1 to 2 of 2

Thread: VBA Adding Rows To Table With Content Control

  1. #1

    VBA Adding Rows To Table With Content Control

    Hi,

    I found the following code online for adding rows with content control to a table and this works well when exiting the content control.

    How can i modify the code below to work only when the user clicks the command button?

    Also if there is any text in the 1st column of the row it copies it to the row below. How can make the column blank?

    Can someone point me in the right direction. Apologies if this has been answered previouisly but i was not able to find a solution in the forum.

    Thanks

    Private Sub Document_ContentControlOnExit(ByVal CCtrl As ContentControl, Cancel As Boolean)
    'The following code conditionally adds a new row, with content controls, to the designated table.
    Dim i As Long, j As Long, Prot As Long
    Const Pwd As String = "" 'Insert password (if any) here
    'Bookmarking the table provides the flexibility of being able to deal with the addition/deletion
    ' of other tables before the one we want to process.
    Const StrBkMk As String = "TblBkMk"
    'Exit if we're not in a table - we don't really need this is using a bookmarked table,
    ' but it's a safeguard against the bookmark having been expanded/moved.
    If CCtrl.Range.Information(wdWithInTable) = False Then Exit Sub
    With ActiveDocument
      If .Bookmarks.Exists(StrBkMk) = False Then
        MsgBox "The table bookmark: '" & StrBkMk & "' is missing." & vbCr & _
        "Please add it to the relevant table before continuing.", vbExclamation
        Exit Sub
      End If
    End With
    With CCtrl
      'Check that the Content Control is within our bookmarked table's range.
      If .Range.InRange(ActiveDocument.Bookmarks(StrBkMk).Range) = False Then Exit Sub
      ' One could test for a particular table instead, in which case all the code dealing
      ' with wdWithInTable & StrBkMk can be deleted. For example:
      'If .Range.InRange(ActiveDocument.Tables(1).Range) = False Then Exit Sub
      'Get the number of ContentControls in the table
      i = .Range.Tables(1).Range.ContentControls.Count
      'Get our ContentControl's index # in the table
      j = ActiveDocument.Range(.Range.Tables(1).Range.Start, .Range.End).ContentControls.Count
      'Check that we're using the last content control
      If i <> j Then Exit Sub
    End With
    'Solicit user input
    If MsgBox("Add new row?", vbQuestion + vbYesNo) <> vbYes Then Exit Sub
    With ActiveDocument
      ' Un-protect the document, if applicable
      Prot = .ProtectionType
      If .ProtectionType <> wdNoProtection Then
        Prot = .ProtectionType
        .Unprotect Password:=Pwd
      End If
      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
      'Update the bookmarked range
      .Bookmarks.Add Name:=StrBkMk, Range:=Selection.Tables(1).Range
      ' Re-protect the document, if applicable
      .Protect Type:=Prot, Password:=Pwd
    End With
    End Sub

  2. #2
    Graham Mayor - MS MVP (Word) 2002-2019
    Visit my web site for more programming tips and ready made processes
    http://www.gmayor.com

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •