【发布时间】:2020-11-02 00:53:35
【问题描述】:
我正在尝试在 Excel VBA 中使用 Command Button 将项目添加到 Userform 中的列表框中。棘手的部分是,如果用户多次单击按钮(多次添加相同的项目),则应将所述项目分组。例如,第一个按钮被命名为cmdItem1,并以Item 1 作为其标题。列表框名为lstSaleDetail,有两列,其中一列用于注册项目的名称,第二列用于注册数量,从 1 开始。
因此,第一次单击任何按钮时,列表框中会添加一个数量为 1 的新行。但是,单击相同按钮的第二次(或任何其他)时,而不是添加新的数量为 1 的行,我希望现有行更新并显示数量为 2。为此,我尝试了以下代码:
Private Sub cmdItem1_Click()
If lstSaleDetail.ListCount > 0 Then
For i = 0 To (lstSaleDetail.ListCount - 1)
If cmdItem1.Caption = lstSaleDetail.List(i) Then
lstSaleDetail.List(i, 1) = lstSaleDetail.List(i, 1) + 1
Else
lstSaleDetail.AddItem
lstSaleDetail.List(lstSaleDetail.ListCount - 1, 0) = cmdItem1.Caption
lstSaleDetail.List(lstSaleDetail.ListCount - 1, 1) = "1"
End If
Next i
Else
lstSaleDetail.AddItem
lstSaleDetail.List(lstSaleDetail.ListCount - 1, 0) = cmdItem1.Caption
lstSaleDetail.List(lstSaleDetail.ListCount - 1, 1) = "1"
End If
End Sub
这仅适用于列表框为空的情况,在这种情况下代码可以完美运行。但是,如果添加了任何其他项目(因此有不止一行),代码就会中断。尽管包含被点击项目信息的第一行不断增加其数量,但同一项目的新行也会被添加,这不应该发生。关于我的代码可能有什么问题的任何建议?
作为澄清,我添加了If lstSaleDetail.ListCount > 0 Then 条件,否则当列表框为空时,任何代码都不起作用。
【问题讨论】: