PDA

View Full Version : Programatically create Fully Functional DropdownList (or ComboBox) Content Controls



gmaxey
01-10-2021, 08:41 AM
Has anyone had any success (without using a sledgehammer) for creating and insert fully functional dropdown list contentcontrols?

A basic attempt (Attempt 1) produces a CC with the expected "Choose an item." displayed. But there is no "Choose an item." DD list entry, so no way for the user to re-select the null a null listing.


Sub Attempt1()
Dim oCC As ContentControl
Set oCC = ActiveDocument.ContentControls.Add(wdContentControlDropdownList, Selection.Range)
With oCC
.DropdownListEntries.Add "A", "Apples"
.DropdownListEntries.Add "B", "Beets"
End With
'Result: "Choose an item." is displayed but there is no null "Choose an item." entry in the resulting DD List.
lbl_Exit:
Exit Sub
End Sub


With a little more grease, (Attempt 2) produces a CC with the expected "Choose an item." displayed and the expected "Choose an item." DD list entry, but if that entry is selected, the value displayed is the "text" variant of "Choose and item." not the expected null variant.





Sub Attempt2()
Dim oCC As ContentControl
Set oCC = ActiveDocument.ContentControls.Add(wdContentControlDropdownList, Selection.Range)
With oCC
.DropdownListEntries.Add oCC.PlaceholderText, vbNullString
.DropdownListEntries.Add "A", "Apples"
.DropdownListEntries.Add "B", "Beets"
'Result: "Choose an item." is displayed and there is a "Choose a item." in the DD List. _
However, if that item is selected, the display is not displayed as null Placeholder text."
End With
lbl_Exit:
Exit Sub
End Sub


Now the sledgehammer. With (Attempt3), I first created a basic DDL content control with the built-in interface and saved it as a buildingblock. This works of course but requires access to a template.



Sub Attempt3()
Dim oRng As Range
Dim oCC As ContentControl
'Requires a DDL inserted via built-in UI saved as a buildingblock entry.
Set oRng = Selection.Range
ThisDocument.AttachedTemplate.BuildingBlockEntries("BasicDDL").Insert oRng, True
oRng.End = oRng.End + 2
Set oCC = oRng.ContentControls(1)
With oCC
.DropdownListEntries.Add "A", "Apples"
.DropdownListEntries.Add "B", "Beets"
'Result: A fully functional DDL content control.
End With
lbl_Exit:
Exit Sub
End Sub

Has anyone found a way to do this without having to use the built-in UI or a template?

Cross posted at:
https://www.msofficeforums.com/word-vba/46303-programatically-create-fully-funcitional-dropdownlist-combobox-content.html#post156822
(https://www.msofficeforums.com/word-vba/46303-programatically-create-fully-funcitional-dropdownlist-combobox-content.html#post156822)https://answers.microsoft.com/en-us/msoffice/forum/msoffice_word-msoffice_custom-mso_2019/programatically-create-fully-funcitional/2243227f-3e99-4958-a0ab-108ff936cc74?tm=1610293467362

gmaxey
01-11-2021, 09:59 AM
Solved at: https://www.msofficeforums.com/word-vba/46303-programatically-create-fully-functional-dropdownlist-combobox-content.html

bobbyrfletch
01-15-2021, 01:46 AM
Thanks for update. I was looking for this.

gmaxey
01-15-2021, 09:37 AM
Bobby,

A little more update if you care to look: https://www.msofficeforums.com/word-vba/46303-programatically-create-fully-functional-dropdownlist-combobox-content.html