首页 > 解决方案 > 无法在 Word 文档中使用 Visual Basic 抓取列表框

问题描述

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

那么我现在的问题是我似乎无法获取我创建的列表框 ContentControl。

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

目前这就是我能得到的全部

Sub ListBox_AfterUpdate()

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


End Sub

我已经用盒子尝试了几件事来尝试让它有数据。我的第一个假设是,因为它是一个集合,所以我会通过使用项目的第一个索引找到第一个项目..但它总是说该索引处没有项目。

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

标签: vbams-word

解决方案


要按标签访问控件及其功能,请阅读. SelectContentControlsByTag这表明返回的对象是与标记匹配的控件的集合,因此很明显,您可能有多个具有相同标记字符串的控件。

通过始终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

推荐阅读