将选择属性添加到ListboxVBA

时间:2016-09-21 22:48:02

标签: excel vba excel-vba listbox

我试图从工作表中填充一个列表框,并且想要预先确定哪些列表项已经有一个复选框。我已经找到了确定列表框中哪些项目被检查的方法,但没有相反的方法。我有代码运行我的列表并插入我的范围内的每个项目,但无法找到分配所选属性的方法。我的工作表将添加每个项目,并选择是否为1或0。

工作表;

    Item   Include?

    TaskA   1 
    TaskB   0 
    TaskC   1

我希望在所有的一个旁边都有一个选定的标记,而不包含一个带有0的所有标记。

这是我目前的尝试,我尝试循环(i)在其插入的字段旁边的表中查找:

For Each RngTask In ws.Range(Cells(2, 2), Cells(Count, 2))
    FRM_StorageOptions.StorageList.AddItem RngTask.Value
    If ws.Cells(i, 2) = 1 Then
        FRM_StorageOptions.StorageList.Selected(i - 1) = True
    Else
        FRM_StorageOptions.StorageList.Selected(i - 1) = False
    End If
    i = i + 1
Next RngTask

但是它不允许我分配此属性并返回"无法设置所选属性。无效的属性值"。添加到列表工作正常,而我没有尝试添加所选值。

感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

Set用于分配对象。如果要分配非对象值(如布尔值或整数),则不要使用Set

尝试更改:

Set FRM_StorageOptions.StorageList.Selected(i - 1) = True

为:

FRM_StorageOptions.StorageList.Selected(i - 1) = True

并对使用Set

的其他两行执行相同操作

即使列表框本身是一个对象,您分配的属性也不是对象,因此不使用Set

答案 1 :(得分:0)

如果ws.Range(Cells(2, 2), Cells(Count, 2))

ws <> ActiveSheet将失败。这是因为范围内的单元格必须符合与范围相同的工作表。

您似乎想要添加A列的值并检查B列,看看是否应该选择它们。您可以从B列添加并检查B列。


    Item    Include?
    TaskA         1 
    TaskB         0 
    TaskC         1

这是我对你要做什么的最好的猜测。

With FRM_StorageOptions.StorageList
    For Each RngTask In ws.Range("A2", "A" & Count)

        .AddItem RngTask.Value

        .Selected(.ListCount - 1) = RngTask.Offset(0, 1) = 1

    Next RngTask
End With