VBA excel - 将组合框项添加到列表框

时间:2017-11-21 09:25:17

标签: excel vba excel-vba listbox

我希望有人可以帮助我解决这个问题。 我有一个组合框,其中包含来自命名区域的数据,我想从组合框中选择一个值并将其添加到列表框中。

目前我可以使用按钮将一个项目添加到列表框中,但是一旦我添加了另一个项目,它就会覆盖当前项目。

如果列表框中已经有一些值,它还需要能够在底部添加一个项目。

我认为这与查找最后一行有关,但我不确定,任何帮助都会受到高度赞赏:)

image of the issue

Dim i As Integer

With Me.lb_lease

.ColumnCount = 3
.ColumnWidths = "200;50;50"
.AddItem
.List(i, 0) = cbox_hardware.Column(0)
.List(i, 1) = cbox_hardware.Column(1)
.List(i, 2) = cbox_hardware.Column(2)
i = i + 1

End With

1 个答案:

答案 0 :(得分:0)

我建议将设置列表框和添加项目的操作分开。下面的过程将设置框并清除所有现有内容。更改工作表和列表框的名称以符合您的具体情况。如果列表框位于用户表单中,代码也将起作用。

Private Sub ResetListBox()

    With Worksheets("LibraryAccount").ListBox1
        .ColumnCount = 3
        .ColumnWidths = "80;50;50"
        .Clear                          ' delete current list
    End With
End Sub

下一个程序会向其添加一个项目。它需要一个分号分隔的字符串,例如"一个;两个;三个"。您可以使用ListIndex将其与组合框结果连接以识别行。该过程将反汇编字符串并将其添加到列表的底部。必须更改工作表和列表框名称。

Private Sub AddToListBox(AddArray As String)

    Dim Arr() As String
    Dim i As Integer
    Dim C As Long

    Arr = Split(AddArray, ";")

    With Worksheets("LibraryAccount").ListBox1
        i = .ListCount
        .AddItem
        For C = 0 To 2
            .List(i, C) = Arr(C)
        Next C
    End With
End Sub

以下程序用于测试上述程序。您可以运行ResetListbox,然后多次致电TestAdd

Private Sub TestAdd()
    AddToListBox "One;Two;Three"
End Sub