3

我正在尝试为 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.

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

4

1 回答 1

2

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

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

' 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
于 2016-12-08T19:21:03.907 回答