![]() |
#3
|
||||
|
||||
![]()
I'd normally do this kind of thing via an on-exit macro in the document's 'ThisDocument' code module:
Code:
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 Variant 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" 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 range. ' One could test for a particular table instead If .Range.InRange(ActiveDocument.Bookmarks(StrBkMk).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 Selection.Tables(1).Range.Bookmarks.Add (StrBkMk) '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 ' Re-protect the document, if applicable .Protect Type:=Prot, Password:=Pwd End With End Sub Code:
'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" 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 Code:
'Check that the Content Control is within our bookmarked range. ' One could test for a particular table instead If .Range.InRange(ActiveDocument.Bookmarks(StrBkMk).Range) = False Then Exit Sub Code:
'Check that the Content Control is within our table. If .Range.InRange(ActiveDocument.Tables(#).Range) = False Then Exit Sub Note: If you simply delete the following code block, instead of changing it, the macro will apply to all tables with content controls: Code:
'Check that the Content Control is within our bookmarked range. ' One could test for a particular table instead If .Range.InRange(ActiveDocument.Bookmarks(StrBkMk).Range) = False Then Exit Sub
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] Last edited by macropod; 09-08-2015 at 08:03 PM. Reason: Revised code, with more commenting |
Thread Tools | |
Display Modes | |
|
![]() |
||||
Thread | Thread Starter | Forum | Replies | Last Post |
![]() |
ScotsMaverick | Mail Merge | 25 | 11-04-2021 02:07 PM |
![]() |
bloomhaven | Word VBA | 3 | 03-11-2015 04:08 PM |
Creating VBA Code to Delete Empty Column in Table | Faugs | Word VBA | 5 | 08-07-2014 03:29 PM |
![]() |
VBLearner | Word VBA | 1 | 03-09-2014 08:42 PM |
VBA sort table code | mikec | Excel Programming | 8 | 10-01-2013 04:37 PM |