#16
|
||||
|
||||
For example, where the tables of interest are bookmarked as Tbl1, Tbl2, and Tbl3, respectively: 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, StrBkMk As String 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. 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("Tbl1").Range) = False) And _ (.Range.InRange(ActiveDocument.Bookmarks("Tbl2").Range) = False) And _ (.Range.InRange(ActiveDocument.Bookmarks("Tbl3").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 StrBkMk = .Range.Tables(1).Range.Bookmarks(1).Name 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 .Bookmarks(StrBkMk).Range.Tables(1) 'Insert an empty paragraph after our table, then replace it with a replica of the last row With .Rows.Last.Range .Next.InsertBefore vbCr .Next.FormattedText = .FormattedText End With .Range.Bookmarks.Add (StrBkMk) 'Reset all content controls in the new last row For Each CCtrl In .Rows.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
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
#17
|
|||
|
|||
Dear macropod,
Thanks for the help. This works well for me! As mentioned earlier, I have 3 tables which I have already bookmarked the tables of interest as Tbl1, Tbl2, Tbl3. Each of these tables have 3 columns and 1 row. At the last column/last row/last cell, instead of one content control, I have multiple content controls, where the last content control (bottom most) is named as "Resolve Date". As such, when the user is prompted to add a new row, in the new row itself, the bookmark location will be shifted (it will not be in the exact spot “Resolve Date” as in the first row that I want it to be) and the user will be prompted to enter new row again at multiple content controls, not at the content control named as “Resolve Date”. I have sought Mr Gregory's opinion on this and he has kindly advised me to modify my code to look for a specific tag/name upon ContentControl on Enter. I tried to incorporate another conditional if statement as follows: If CCtrl.Title = "Resolve Date" Then If MsgBox("Add new row?", vbQuestion + vbYesNo) <> vbYes Then Exit Sub End If However this does not work. Are you able to advise how I should modify my code pls? Thanks. |
#18
|
|||
|
|||
Hi Macropod,
Thanks for the reply earlier. I have actually found another method to solve this from Mr Gregory's webpage which is to add a command button in the QAT to append row in the table. This works well for me too. Thank you very much! |
#19
|
||||
|
||||
Quote:
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
#20
|
|||
|
|||
Quote:
|
#21
|
||||
|
||||
As written, the code checks whether it is exiting the last content control in the table. The number of content controls in that row is of no consequence. Indeed, the code was tested against tables having every possible kind of content control in a given row - including multiples of the same kind.
That said, it was not envisaged that the code would be run against a table having multiple content controls in the same cell. That could be accomodated by changing: Code:
'Get our ContentControl's index # in the table j = ActiveDocument.Range(.Range.Tables(1).Range.Start, .Range.End).ContentControls.Count Code:
'Get our ContentControl's index # in the table j = ActiveDocument.Range(.Range.Tables(1).Range.Start, .Range.Cells(1).Range.Start).ContentControls.Count j = j + ActiveDocument.Range(.Range.Cells(1).Range.Start, .Range.End).ContentControls.Count
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
#22
|
|||
|
|||
Quote:
Thanks macropod for your kind assistance. I tried but it prompts the user to add new row at one of my content controls in a nested table contained within the last row/cell instead of the last content control. I think I may need to show you how my table looks like in order for you to help me see where the issue lies but I'm afraid it will take up too much of your time. I forgot to mention that I also have a nested table within the last row/cell containing 3 content controls so it complicates things. But meanwhile, I will stick to using the quick access toolbar to add new row first as I have not encountered any errors with that! Thanks a lot macropod. |
#23
|
||||
|
||||
Quote:
The obvious problem with that, though, is that you have no control over when the user inserts a new row - which may or may not be needed - plus the adding needs to be available to every PC on which the process is to be run. Good luck with that on Macs...
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
#24
|
|||
|
|||
Unfortunately, yes The format of the table is fixed and I can't change that. Yes, noted your advice.
|
#25
|
|||
|
|||
macropod or other experts on this thread willing to help a noob out... I've attached a sample document with the version of the macro I think I need, and several tables (It is not currently restricted to forms).
The middle table on the document has been bookmarked 'Tbl1', but I am unable to get the macro to fire, and I'm wondering what I might be missing. Thank you. |
|
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
Colour code mail merge header table cell backgrounds | ScotsMaverick | Mail Merge | 25 | 11-04-2021 02:07 PM |
Code to disable spacing between cells in table properties | 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 |
VBA Code to take data from a table in word document and place it in a summary table | VBLearner | Word VBA | 1 | 03-09-2014 08:42 PM |
VBA sort table code | mikec | Excel Programming | 8 | 10-01-2013 04:37 PM |