在VBA中满足条件时,退出if语句中的循环



我正在尝试使用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条件,因为否则当列表框为空时,任何代码都不起作用。

一旦在循环中匹配,就可以退出子。如果你通过了循环,没有匹配,所以添加为新项目:

Private Sub CommandButton1_Click()
AddToList CommandButton1.Caption
End Sub
Private Sub CommandButton2_Click()
AddToList CommandButton2.Caption
End Sub
Private Sub CommandButton3_Click()
AddToList CommandButton3.Caption
End Sub
Private Sub AddToList(capt)
Dim i As Long
With lstSaleDetail
'loop and look for the passed caption
For i = 0 To (.ListCount - 1)
If capt = .List(i) Then
.List(i, 1) = .List(i, 1) + 1
Exit Sub 'done...
End If
Next i
'if we got here there was no match, so add as new item
.AddItem capt
.List(.ListCount - 1, 1) = "1"
End With

End Sub

最新更新