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)

必要なフィルタリングを行います。問題は、作成者を選択すると、上記のコードの 2 行目でマクロが壊れてしまうことです。

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

この質問が投稿されてからしばらく経ちましたが、回答がないため、回答できるよう最善を尽くします。

項目を 1 つずつ追加するのではなく、一度にすべて追加することができます。まず、すべてのオプションをカンマで区切って「ブックリスト」を作成し、これをセルに追加します。以下の例を参照してください。

' 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 に答える