vba - 如何从 Excel (VBA) 中的代码设置下拉选择

标签 vba excel drop-down-menu

我正在尝试为 Excel 表格制作过滤器。我有 2 个下拉框,其中的项目列表动态添加到刷新表格时调用的宏中。

Set selectBook = Worksheets("Report").DropDowns("DropDownBook")
selectBook.RemoveAllItems

For Each b In books
        selectBook.AddItem (b)
Next

其中“books”是一个包含新值的数组。带有“作者”的其他下拉菜单的代码是相似的。 运行此宏后,不会显示任何初始选择。我已将一个宏附加到 dropdownchange 事件,它读取两个下拉列表中的选择

Set books = Worksheets("Report").DropDowns("DropDownBook")
bookSelect = books.List(books.ListIndex)

并进行必要的过滤。问题是,如果我选择一个作者,宏将在上面给出的第二行代码中中断

Run time error '1004':
Unable to get the List property of the DropDown class

如果我选择一本书,它也会为作者做同样的事情。我想发生这种情况是因为框中没有初始选择,但我似乎无法找到如何在代码中进行选择的方法。我试过了

selectBook.ListIndex = 0, selectBook.Value=0 etc.

,但没有任何效果。我错过了一些明显的东西吗?任何帮助将不胜感激。

最佳答案

我意识到这个问题发布已经有一段时间了,但由于没有答案,我会尽力提供一个。

您可以一次添加所有项目,而不是一个一个地添加项目。首先创建一个“书单”,所有选项都用逗号分隔,然后将其添加到单元格中。请参见下面的示例。

' Create option list
books = Array("The Very Hungry Caterpillar", "A Christmas Carol", "Ulysses")
booklist = Join(books, ",")

' Set drop down list
With Sheets("Books").Cells(1, 1).Validation
    .Delete
    .Add Type:=xlValidateList, Formula1:=booklist
End With

您可以将其包装到一个单独的过程中,您可以在需要动态添加下拉列表时调用该过程。

Sub SetDropDown(cellRef As Range, valueArray As Variant)

    ' Declare variables
    Dim valueFormula

    ' Create formula
    valueFormula = Join(valueArray, ",")

    ' Set dropdown
    With cellRef.Validation
        .Delete
        .Add Type:=xlValidateList, Formula1:=valueFormula
    End With

End Sub

关于vba - 如何从 Excel (VBA) 中的代码设置下拉选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18967436/

相关文章:

java - 使用selenium java按索引号选择列表值

vba - 参数太少。预计 1 - 但我有一个

ms-access - 微软 Access : select maximum column value of a table

vba - 使自定义函数不返回任何内容 - 不是 0,不是空字符串,而是什么也不返回

excel - 如何在 Excel 中组合具有不同列名和列顺序的多个 CSV 文件?

excel - VBA 过滤和计数值

javascript - yii2 dropDownList 当从所有索引获取值时总是晚一步

ios - Swift:向下滚动时下拉溢出消失

html - 我该如何提取这段文字

excel - VBA Excel文本到列数据仅返回一行