【问题标题】:Macro stuck in For Each loop when populating ListBox填充 ListBox 时宏卡在 For Each 循环中
【发布时间】:2019-08-01 18:09:46
【问题描述】:

我有以下代码来填充列表框:

For Each cellValue In Sheet7.Range("A:A").Cells
    If cellValue.value = Get_ClientID(TextBox1.Text) Then
        equipmentName = Get_EquipmentName(Sheet7.Cells(cellValue.row, 2))
        numeroCalibracao = TextBox6.Text
        ultimacalibracao = TextBox5.Text
        ListBox1.AddItem equipmentName
        ListBox1.List(ListBox1.ListCount, 1) = numeroCalibracao
        ListBox1.List(ListBox1.ListCount, 2) = ultimacalibracao
    End If
Next

问题在于,Excel 在运行时没有响应,甚至 Ctrl + Break 都无法跳出循环。它应该根据表 7 上匹配条目的数量填充列表框。我尝试用数字替换 ListBox1.Listcoun,但它仍然不起作用。我错过了什么?

信息:

  • Get_ClientID 是一个接受字符串,返回整数的函数;
  • Get_EquipmentName 是一个接受整数,返回字符串的函数;
  • cell valueequipmentNamenumeroCalibracaoultimaCalibracao 是变量 Dimed 在 sub 开头。

如果需要更多信息,请告诉我,我会提供。

【问题讨论】:

    标签: excel vba foreach listbox populate


    【解决方案1】:

    问题是你的主循环,你正在遍历A列中的每一行。我建议你将范围设置为"Range("A1:A" & LastRow),其中LastRow是你的最后一行,例如:

    LastRow = Range("A:A").Find(what:="*", After:=Range("A1"), LookAt:=xlPart, LookIn:=xlFormulas, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False).row
    

    如果仍然没有响应,请在循环中添加 DoEvents

    【讨论】:

    • 感谢您的回答,但我(当然)可以说这不是问题所在。或者不应该,因为我还有其他 Foreach 循环也遍历整个列,它们不会导致这种情况。
    • 即使这不是问题,你为什么要遍历 1048576 行?
    • 简单地说:我没有费心去缩小范围,因为我正处于开发这个的早期阶段,所以很快就会进行优化(你建议的这个,例如.xD)
    • 这就是为什么你的 excel 挂起的原因! :)
    • 我必须承认:这样做实际上解决了问题。我仍然不明白为什么,特别是因为我所说的我的其他 Foreach 循环贯穿整个专栏并没有导致这种情况。但它解决了,你帮助了我:我接受这个答案。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2014-11-12
    • 2015-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多