【问题标题】:Exit loop within if statement when condition is met in VBA在VBA中满足条件时在if语句中退出循环
【发布时间】: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 条件,否则当列表框为空时,任何代码都不起作用。

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    您可以在循环中进行匹配后立即退出子。如果您通过了循环,则没有匹配项,因此添加为新项目:

    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
    

    【讨论】:

    • 这非常有效。感谢您的帮助。从理论上讲,capt 部分只是一个可以修改为任何内容的变量名,对吧?
    • 是的,您可以随意命名。
    • 谢谢!你完美地解决了我的问题。先生,祝您有美好的一天。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-23
    • 2023-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多