#1
|
|||
|
|||
drop-out the table items using the vba in word
When user will be click to check box near the "Spouse of employee" (I attached the screen of table) the list of rows with items must appear, without user's clicking it must be closed.
How can I run such macros? |
#2
|
||||
|
||||
Frankly I wouldn't do it like this personally - better to create a userform to make the selections and create the document based on the selections, but you can do it using content controls - see attached.
See also https://www.msofficeforums.com/word-...-checkbox.html
__________________
Graham Mayor - MS MVP (Word) (2002-2019) Visit my web site for more programming tips and ready made processes www.gmayor.com |
#3
|
|||
|
|||
Thank you for answer
|
#4
|
|||
|
|||
Where in this macros I need change the line or add new function that list items must be different in each case?
Because now it copies list items from first table(employee) Code:
Option Explicit Private Sub Document_ContentControlOnEnter(ByVal ContentControl As ContentControl) Dim oTable As Table Dim oRng As Range Dim occ As ContentControl Dim i As Integer 'Spouse Select Case ContentControl.Title Case "Spouse" Set oRng = ContentControl.Range.Tables(1).Range For i = 1 To ActiveDocument.Tables.Count If oRng.InRange(ActiveDocument.Tables(i).Range) Then Exit For End If Next i If ContentControl.Checked = True Then MsgBox "Выбрать супруга(-у)" If Not ActiveDocument.Tables(i + 1).Rows.Count > 1 Then Set oRng = ActiveDocument.Tables(i).Range oRng.Collapse 0 oRng.Text = vbCr oRng.Collapse 0 oRng.FormattedText = ActiveDocument.Tables(2).Range.FormattedText End If Else MsgBox "Удалить супруга(-у)" Set oTable = ActiveDocument.Tables(i + 1) If oTable.Rows.Count > 1 Then For Each occ In oTable.Range.ContentControls occ.LockContentControl = False Next occ Set oRng = oTable.Range oRng.Start = oRng.Start - 1 oRng.End = oRng.Paragraphs(1).Range.End oTable.Delete oRng.Delete End If End If Selection.HomeKey wdStory 'Child 1 Case "Child1" Set oRng = ContentControl.Range.Tables(1).Range For i = 1 To ActiveDocument.Tables.Count If oRng.InRange(ActiveDocument.Tables(i).Range) Then Exit For End If Next i If ContentControl.Checked = True Then MsgBox "Adding child section" If oRng.InRange(ActiveDocument.Tables(ActiveDocument.Tables.Count).Range) Then Set oRng = ActiveDocument.Tables(i).Range oRng.Collapse 0 oRng.Text = vbCr oRng.Collapse 0 oRng.FormattedText = ActiveDocument.Tables(2).Range.FormattedText End If Else If Not oRng.InRange(ActiveDocument.Tables(ActiveDocument.Tables.Count).Range) Then MsgBox "Removing child section" Set oTable = ActiveDocument.Tables(i + 1) If oTable.Rows.Count > 1 Then For Each occ In oTable.Range.ContentControls occ.LockContentControl = False Next occ Set oRng = oTable.Range oRng.Start = oRng.Start - 1 oRng.End = oRng.Paragraphs(1).Range.End oTable.Delete oRng.Delete End If End If End If Selection.HomeKey wdStory 'Child 2 Case "Child2" Set oRng = ContentControl.Range.Tables(1).Range For i = 1 To ActiveDocument.Tables.Count If oRng.InRange(ActiveDocument.Tables(i).Range) Then Exit For End If Next i If ContentControl.Checked = True Then MsgBox "Adding child section" If oRng.InRange(ActiveDocument.Tables(ActiveDocument.Tables.Count).Range) Then Set oRng = ActiveDocument.Tables(i).Range oRng.Collapse 0 oRng.Text = vbCr oRng.Collapse 0 oRng.FormattedText = ActiveDocument.Tables(2).Range.FormattedText End If Else If Not oRng.InRange(ActiveDocument.Tables(ActiveDocument.Tables.Count).Range) Then MsgBox "Removing child section" Set oTable = ActiveDocument.Tables(i + 1) If oTable.Rows.Count > 1 Then For Each occ In oTable.Range.ContentControls occ.LockContentControl = False Next occ Set oRng = oTable.Range oRng.Start = oRng.Start - 1 oRng.End = oRng.Paragraphs(1).Range.End oTable.Delete oRng.Delete End If End If End If Selection.HomeKey wdStory 'Child 3 Case "Child1" Set oRng = ContentControl.Range.Tables(1).Range For i = 1 To ActiveDocument.Tables.Count If oRng.InRange(ActiveDocument.Tables(i).Range) Then Exit For End If Next i If ContentControl.Checked = True Then MsgBox "Adding child section" If oRng.InRange(ActiveDocument.Tables(ActiveDocument.Tables.Count).Range) Then Set oRng = ActiveDocument.Tables(i).Range oRng.Collapse 0 oRng.Text = vbCr oRng.Collapse 0 oRng.FormattedText = ActiveDocument.Tables(2).Range.FormattedText End If Else If Not oRng.InRange(ActiveDocument.Tables(ActiveDocument.Tables.Count).Range) Then MsgBox "Removing child section" Set oTable = ActiveDocument.Tables(i + 1) If oTable.Rows.Count > 1 Then For Each occ In oTable.Range.ContentControls occ.LockContentControl = False Next occ Set oRng = oTable.Range oRng.Start = oRng.Start - 1 oRng.End = oRng.Paragraphs(1).Range.End oTable.Delete oRng.Delete End If End If End If Selection.HomeKey wdStory 'Child 4 Case "Child1" Set oRng = ContentControl.Range.Tables(1).Range For i = 1 To ActiveDocument.Tables.Count If oRng.InRange(ActiveDocument.Tables(i).Range) Then Exit For End If Next i If ContentControl.Checked = True Then MsgBox "Adding child section" If oRng.InRange(ActiveDocument.Tables(ActiveDocument.Tables.Count).Range) Then Set oRng = ActiveDocument.Tables(i).Range oRng.Collapse 0 oRng.Text = vbCr oRng.Collapse 0 oRng.FormattedText = ActiveDocument.Tables(2).Range.FormattedText End If Else If Not oRng.InRange(ActiveDocument.Tables(ActiveDocument.Tables.Count).Range) Then MsgBox "Removing child section" Set oTable = ActiveDocument.Tables(i + 1) If oTable.Rows.Count > 1 Then For Each occ In oTable.Range.ContentControls occ.LockContentControl = False Next occ Set oRng = oTable.Range oRng.Start = oRng.Start - 1 oRng.End = oRng.Paragraphs(1).Range.End oTable.Delete oRng.Delete End If End If End If Selection.HomeKey wdStory End Select End Sub but I changed it to Russian letters and finally in MsgBox shows smth not readable, What should I do?) Thank you! |
#5
|
|||
|
|||
Drop Down function with help of check box. Need different value of list items
In this code when I click check box button it shows list of items. For example in "Spouse of employee" table it shows( First Name; Last Name; Phone number and etc). And even if I want to add different items for each tables after updating page all items take a value of first table "Employee". But I do not need it.
I need only drop down function with help of check box, it runs perfect. But the value of each tables must be different, I will type value.( for example, in "Spouse of Employee" list of items must be: First name of Spouse; Last Name of Spouse and etc. and it the value must be different, now it just copy value from 'Employee table") Where in this code do I need change function and which Function? Thank you in advance.! |
#6
|
|||
|
|||
Can Somebody help me please??
Gmayor? |
#7
|
||||
|
||||
Try:
Code:
Private Sub Document_ContentControlOnExit(ByVal CCtrl As ContentControl, Cancel As Boolean) Dim Tbl As Table, Rng As Range, i As Long Dim oCCtrl As ContentControl With CCtrl i = ActiveDocument.Range(0, .Range.Tables(1).Range.End).Tables.Count Select Case .Title Case "Spouse" If .Checked = True Then MsgBox "Adding spouse section" Set Rng = .Range.Tables(1).Range Call AddGroup(Rng, i) Else MsgBox "Removing spouse section" Set Rng = ActiveDocument.Tables(i + 1).Range Call RemoveGroup(Rng) End If Case "Child1" If .Checked = True Then MsgBox "Adding child section" Set Rng = .Range.Tables(1).Range Call AddGroup(Rng, i) Else MsgBox "Removing child section" Set Rng = ActiveDocument.Tables(i + 1).Range Call RemoveGroup(Rng) End If End Select End With End Sub Sub AddGroup(Rng As Range, i As Long) Dim CCtrl As ContentControl, t As Long, bAdd As Boolean bAdd = False If (i = ActiveDocument.Tables.Count) Then bAdd = True If bAdd = False Then If ActiveDocument.Tables(i + 1).Rows.Count = 1 Then bAdd = True End If If bAdd = True Then With Rng .Collapse 0 .Text = vbCr .Collapse 0 .FormattedText = ActiveDocument.Tables(2).Range.FormattedText For Each CCtrl In .ContentControls With CCtrl t = .Type .Type = wdContentControlText .Range.Text = "" .Type = t End With Next End With End If End Sub Sub RemoveGroup(Rng As Range) Dim CCtrl As ContentControl With Rng If .Tables(1).Rows.Count > 1 Then For Each CCtrl In .ContentControls CCtrl.LockContentControl = False Next .End = .End + 1 .Delete End If End With End Sub I'll leave it to you to figure out what to do for those with more than one spouse and/or child... PS: When posting code, please use the code tags, indicated by the # button on the posting menu. Without them, your code loses much of whatever structure it had.
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
#8
|
||||
|
||||
How about some patience on your part... You're not paying anyone here to do your coding!
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
#9
|
|||
|
|||
Thank you for answer.
How can I run it? I replaced my old code for this one. but it doesn't work |
#10
|
|||
|
|||
Quote:
I just forget to write it one my first message and add it separately. |
#11
|
||||
|
||||
The code works just fine - I actually developed and tested it in your document...
What's wrong??? You ask a question, then less than two hours later bump the post with a "Can Somebody help me please??". That's what's wrong. Keep up the behaviour you've exhibited so far and you'll find no-one here willing to help you.
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
|
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
Counting items in the table | digiart | Word VBA | 1 | 08-25-2017 10:17 PM |
Lock items in a table | village | Word | 2 | 06-22-2017 07:33 AM |
Select multiple items from a drop down list | ConfuddledOne | Excel Programming | 0 | 01-30-2017 08:13 PM |
How can I style individual items of a drop down or combobox? | supremegrandruler | Word | 1 | 12-09-2014 03:17 PM |
Drag and Drop Outlook Items to Word | Mike23 | Outlook | 0 | 06-14-2010 03:51 PM |