【问题标题】:While Loop Hanging up in VBA在 VBA 中循环挂断
【发布时间】:2013-11-13 23:01:38
【问题描述】:

我有一小段代码标记重复并从工作表中删除行。

识别重复的部分只是在 J 列数据的右侧添加了“重复”一词,该部分似乎工作正常。

其他部分看起来也可以正常工作,但是一旦完成,它就会挂断 excel,我必须强制它关闭。这是删除部分的代码:

While Not IsEmpty(Range("J2:J" & InvLast))
        For InvList = 2 To InvLast
            If Range("J" & InvList).Value = "Duplicate" Then
                Range("J" & InvList).EntireRow.Delete
            End If
        Next InvList
Wend

我正在处理的测试文件中的 InvLast 只有 28 行,但我需要能够处理几千行而不需要一天的时间来运行。

提前致谢!

【问题讨论】:

  • 需要while循环吗?看起来你的嵌套 For 循环会自己完成这项工作。
  • 只要J列的至少一个单元格中有东西,while循环就永远不会关闭?假设你没有删除每一行,循环不会关闭。
  • 我原以为for循环也会这样做,但是如果连续有一对,excel会删除第一个,然后第二个移动到第一个的行号,但是循环继续。我添加了 while 来覆盖范围,因此 for 循环将遍历 J 中的范围,直到它为空,并且只有 28 个单元格可以遍历,我看不出它在哪里被阻止。

标签: vba excel while-loop


【解决方案1】:

摆脱 While 循环,并使用此方法,这样您就不会跳过行:

Sub deleteDuplicates()
    For InvList = InvLast To 2 Step -1
            If Range("J" & InvList).Value = "Duplicate" Then
               Range("J" & InvList).EntireRow.Delete
            End If
    Next InvList
End Sub

【讨论】:

  • 我明白你想用 Step -1 做什么,但由于某种原因它不起作用。但是,我可以将 {InvList = InvList - 1} 添加到 If 语句中,这似乎可行。
  • 真的吗?奇怪,我测试了代码,它对我有用。不过,您的解决方案也应该可以正常工作。
猜你喜欢
  • 2022-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-25
  • 2017-01-05
  • 1970-01-01
  • 2010-11-13
相关资源
最近更新 更多