我有 Word表单(不是用户表单),其中包含 Legacy DropDownList ( FormField )。
我可以使用我为他们设置的书签来访问这些内容。 (例如:对于带有“书签”书签的人)
ActiveDocument.FormFields("bookmark")
我使用旧版下拉列表而不是 ActiveX ComboBox ,因为我需要使用更改其他旧版下拉列表的值结果彼此等等。
例如:
If ActiveDocument.FormFields("bookmark").Result <> "whatever" Then
Select Case ActiveDocument.FormFields("bookmark").Result
Case "Test"
With ActiveDocument.FormFields("bookmark2").DropDown.ListEntries
.Clear
.Add "Whatever string I want"
.Add "Another string I need"
End With
'Let's not put them all but there is more cases than one
End Select
End If
换句话说,下一个的内容取决于前一个的内容。
话虽这么说,我现在需要对这些下拉列表中的最后一个进行一些多选。问题是,我不能用我读过的 Legacy Dropdown 进行多选。虽然从我所读过的内容中再次使用 ActiveX ComboBox 是可能的。
问题是,我做“依赖”下拉菜单的方式是,当用户选择一个值时,会调用模块来执行上述代码。不幸的是,我不能在这些模块中使用 ActiveX ComboBox ,只能在 ThisDocument 中使用。如果可以的话,我只需要改变
ActiveDocument.FormFields("bookmark2").DropDown.ListEntries
的
Me.ComboBoxWhatever
,
使用 AddItem 代替添加,并从中找到如何进行多项选择。但我不能。
从我尝试/阅读的内容来看,我无法从 ThisDocument 中调用 Sub 方法(这里将使用ComboBox执行我需要的代码) )用户从遗留下拉菜单中选择一个值。
当用户从旧版下拉列表中选择一个值时,我该如何做到这一点,我可以检查结果并填充我的 ActiveX ComboBox 使用适当的值,以便用户可以从 ComboBox 中选择多个选项?
编辑: Cindy Meister答案适用于任何 ActiveX控件,例如ListBox等。
答案 0 :(得分:1)
您可以通过包含它的InlineShape或Shape对象访问ThisDocument
之外的ActiveX控件。 Word通过将它们“包装”在图形对象中来管理非Word内容。
这里有一些示例代码,演示了如何使用“普通”模块中的过程将项添加到组合框列表的末尾。请注意它如何使用OLEFormat.Object
来“嵌入”ActiveX控件的属性和方法。
Sub AddItemToExistingCombo()
Dim doc As word.Document
Dim obj1 As String, oIndex As Long
Dim of As word.OLEFormat
Dim cb As ComboBox
Set doc = ActiveDocument
Set of = ActiveDocument.InlineShapes(1).OLEFormat
'Set of = ActiveDocument.Bookmarks("combobox").Range.InlineShapes(1).OLEFormat
Set cb = of.Object
If Not cb Is Nothing Then
oIndex = cb.ListCount
obj1 = "item" & oIndex + 1
cb.AddItem obj1, oIndex
End If
End Sub
当然,使用InlineShape的索引值并不理想,您可能需要选择并为其添加书签。为此,进入“设计模式”,选择控件并插入书签。