无法在Word文档中使用Visual Basic捕获列表框

时间:2019-04-22 20:04:39

标签: vba ms-word

我总体上想要实现的目标是,在文档上有一个框来保存数据库类型,当有人选择该数据库类型时,该文档将隐藏/显示某些部分。

现在我的问题是我似乎无法抓住我创建的列表框ContentControl。

我有一个带有标签boxDB的列表框ContentControl。

目前这就是我能得到的

Sub ListBox_AfterUpdate()

 Dim box
 Set box = ActiveDocument.SelectContentControlsByTag("boxDB")


End Sub

我已经尝试了几项使用box的尝试,以使其具有数据。我的第一个假设是,由于它是一个集合,所以我将仅使用项的第一个索引来查找第一个项。但是它始终表示该索引处没有项。

我应该使用另一种方法来获取设置的值吗?

1 个答案:

答案 0 :(得分:2)

为了通过标签访问控件及其功能,请阅读reference documentation for SelectContentControlsByTag。这表明返回的对象是与该标签匹配的控件的 collection ,因此很明显,您可能有多个具有相同标签字符串的控件。

在所有代码中always using Option Explicit并通过用类型声明每个变量,可以极大地帮助您自己。这样,您可以使用VBA编辑器的Intellisense功能来揭示编写代码时可用的方法和属性。

假设您的ContentControl已使用标签建立(并且您只有一个带有该标签的控件

Option Explicit

Sub SetupListbox()
    Dim theControls As ContentControls
    Dim box As ContentControl
    Set theControls = ThisDocument.SelectContentControlsByTag("boxDB")
    Set box = theControls.Item(1)
    box.DropdownListEntries.Add "Red"
    box.DropdownListEntries.Add "Green"
    box.DropdownListEntries.Add "Blue"
    box.DropdownListEntries.Add "Yellow"
    box.DropdownListEntries.Add "Orange"
End Sub

Sub GetSelectedItem()
    Dim theControls As ContentControls
    Dim box As ContentControl
    Set theControls = ThisDocument.SelectContentControlsByTag("boxDB")
    Set box = theControls.Item(1)
    Debug.Print box.Range.Text
End Sub