2013-03-14 58 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