MultiColumn ComboBox填充

时间:2018-04-18 07:19:30

标签: excel vba excel-vba

我正在尝试从工作表上的数据填充用户窗体上的多列组合框。

对于一系列行,如果第一列为空且第三列不为空,我想将第三列值和行号存储到组合框中。我试过的代码不断抛出错误:

  

运行时错误'':无法设置Column属性。无效的属性数组索引

For x = 5 To i
If ws.Cells(x, 1) = "" And ws.Cells(x, 3) <> "" Then
    With ComboBox
        .Column(0, .ListCount) = ws.Cells(x, 3)
        .Column(1, .ListCount) = x
    End With
End If
Next x

组合框的属性中列数设置为2。 提前谢谢。

2 个答案:

答案 0 :(得分:0)

你应该使用

.Column(0, .ListCount - 1) = ws.Cells(x, 3)
.Column(1, .ListCount - 1) = x

解决最后一个条目。这是因为.ListCount返回自然条目数(0表示空,1表示1条目等),而.Column()表现得像基于0的数组,因此第1个条目位于.Column(0,...)

修改

您可以使用.AddItem向组合框添加1行,然后逐个填充这些值:

ComboBox.AddItem
With ComboBox
    .Column(0, .ListCount - 1) = ws.Cells(x, 3)
    .Column(1, .ListCount - 1) = x
End With

或者,您可以使用值填充数组并将其加载到组合框中,如下所示:

Dim cBuf(2, 0 to 2)
cBuf(0, 0) = "John"
cBuf(0, 1) = 1982
...
ComboBox = cBuf

在此处阅读更多enter link description here

答案 1 :(得分:0)

非常感谢AcsErno。我的问题的解决方案是为ComboBox创建一个新条目(.AddItem),然后为新条目的每一列分配值。我的代码现在如下所示,并按我的意愿工作。

For x = 5 To i
    If ws.Cells(x, 1) = "" And ws.Cells(x, 3) <> "" Then
        With ComboBox
            .AddItem
            .Column(0, .ListCount - 1) = ws.Cells(x, 3)
            .Column(1, .ListCount - 1) = x
        End With
     End If
Next x