5

配列を使用してリストとしてスタイル設定されたコンボボックスの ListFillRange プロパティを設定したい VBA プロシージャ (Excel 2007) があります。

コンボボックスを右クリックして、"ListFillRange" プロパティの横に "Sheet1!$F2:$F17" と書き込むと、これが機能することがわかります。コードでこれを行うこともできます。ただし、配列を割り当ててこのプロパティの値を動的に設定することに興味があります。

私がテストしたように、アレイが機能することは確かです。おそらくここに構文エラーがあります:

ThisWorkbook.Worksheets("Sheet1").OLEObjects("cmbS").ListFillRange = ar

これを行うと、「タイプの不一致」エラーが発生します。

このアクションの結果、要素(0)から配列の最後の要素(n-1)までの配列要素がコンポーネントに取り込まれます。任意のポインタ、どうもありがとうございました!

私も試しました:

ThisWorkbook.Worksheets("Sheet1").cmbS.list = ar

「許可が拒否されました」と表示されます

役立つ場合のコンボボックスのプロパティは次のとおりです。 ここに画像の説明を入力

テストして試した後、これが機能することがわかりました:

ThisWorkbook.Worksheets("Sheet1").cmbS.ListFillRange = ""

Dim i As Integer
For i = LBound(ar) To UBound(ar)
    ThisWorkbook.Worksheets("Sheet1").cmbS.AddItem (ar(i))

Next

ただし、要素ごとに要素を追加するだけでなく、効果を高めるために一度にすべての値を入力することに興味があります。

4

2 に答える 2

10

遅いことはわかっていますが、他の誰かを助けるかもしれません。少なくとも次のコードは機能します (要素ごとよりもはるかに高速です)。

dim arr() as variant

arr = Worksheets("Total").Range("C2:"&lrow).Value
Worksheets("Menu").ComboBox2.List = arr
于 2014-07-22T13:59:32.817 に答える
0

コンボボックスに配列の内容を入力できる唯一の方法は、要素ごとに行うことです。配列がどれほど大きくても、プロセスが著しく遅いとは信じがたいです。

于 2013-03-14T17:04:32.373 に答える