2013-03-14 83 views
1

我有一個VBA過程(在Excel 2007中),我期望使用數組將列表組合框的ListFillRange屬性設置爲列表。使用數組元素填充VBA中的組合框

我知道這個作品,如果我右鍵單擊組合框,並寫入「Sheet1!$ F2:$ F17」旁邊的「ListFillRange」屬性。我也可以在代碼中做到這一點。但是,我感興趣的是通過爲其分配一個數組來動態設置該屬性的值。

我知道肯定數組的作品,我測試它;有可能是一個語法錯誤的位置:

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

我這樣做時,我得到: 「類型不匹配」的錯誤。

此操作的結果應該是組件使用數組元素(從元素(0)...到數組的最後一個元素(n-1))進行填充。任何指針,非常感謝你!

我也試過:

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

,它說拒絕「權限」

這裏是組合框屬性的情況下,它可以幫助: enter image description here

測試和嘗試之後,我發現這作品:

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

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

Next 

但是,我有興趣一次填寫所有值以獲得更快的效果,不只是添加元素

+0

如果速度慢,在使用additem之前總是將屏幕更新設置爲false。 – 2016-01-26 14:20:17

回答

0

您可以用數組內容填充組合框的唯一方法是逐元素地執行它。我發現很難相信,不管你的陣列有多大,它都會是一個非常緩慢的過程。

+5

不完全正確 - 您可以將二維數組分配給'.List'屬性。這適用於組合框和列表框,例如'MyComboBox.List = My2DArray' – blackworx 2014-05-09 09:53:06

3

我知道它晚了,但也許它會幫助別人。至少下面的代碼適用於我(比元素元素快得多)。

dim arr() as variant 

arr = Worksheets("Total").Range("C2:"&lrow).Value 
Worksheets("Menu").ComboBox2.List = arr