如何从VBA中的Legacy下拉结果填充ComboBox(Word)

时间:2016-05-24 17:15:43

标签: vba combobox ms-word activex legacy

我有 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等。

1 个答案:

答案 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的索引值并不理想,您可能需要选择并为其添加书签。为此,进入“设计模式”,选择控件并插入书签。