【问题标题】:populate combobox in VBA with array elements用数组元素填充 VBA 中的组合框
【发布时间】:2013-03-03 02:49:25
【问题描述】:

我有一个 VBA 过程(在 Excel 2007 中),我希望在其中设置组合框的 ListFillRange 属性,该组合框使用数组作为列表样式。

如果我右键单击组合框并在“ListFillRange”属性旁边写下“Sheet1!$F2:$F17”,我知道这是可行的。我也可以在代码中做到这一点。但是,我有兴趣通过为其分配一个数组来动态设置此属性的值。

我确信该数组在我测试时可以正常工作;这里可能有语法错误:

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

当我这样做时,我得到: “类型不匹配”错误。

此操作的结果应该是组件填充了数组元素,从 element(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

但是,我有兴趣一次填充所有值以获得更快的效果,不仅仅是逐个元素添加

【问题讨论】:

  • 如果速度很慢,请在使用 additem 之前将屏幕更新设置为 false。

标签: excel excel-2007 vba


【解决方案1】:

我知道它已经晚了,但也许它会帮助别人。至少以下代码对我来说有效(比元素的元素快得多)。

dim arr() as variant

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

【讨论】:

  • 谢谢瓦伦丁! Worksheets("Menu").ComboBox2.List = arr ==> 这就是我所需要的,它的工作原理就像一个魅力!
【解决方案2】:

使用数组内容填充组合框的唯一方法是逐个元素地进行。无论您的阵列有多大,我都很难相信这将是一个非常缓慢的过程。

【讨论】:

  • 不太正确 - 您可以将二维数组分配给 .List 属性。这适用于组合框和列表框,例如MyComboBox.List = My2DArray
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-03
  • 1970-01-01
相关资源
最近更新 更多