VBA excel删除无限循环
Posted
技术标签:
【中文标题】VBA excel删除无限循环【英文标题】:VBA excel delete endless loop 【发布时间】:2016-08-22 01:16:04 【问题描述】:我使用了来自其他堆栈交换问题的逻辑,但我无法弄清楚。 (看这里的好例子:VBa conditional delete loop not working)我相信这真的很简单。为什么我的代码在这里陷入无限循环?
我只是替换一个值,然后删除一系列行。有什么想法有什么问题吗?双循环问题可能吗?我已经看了太久了,这一切对我来说似乎都是合乎逻辑的。任何帮助将非常感激。
i = 4
Do While i < 10
j = 0
Do While j < 24
ho = Cells(i, 69 + j)
If 0 < ho < 3 Then
k = Cells(i, 67 + j)
Cells(i - 1, 67 + j) = k
Range(Cells(i, 66 + j), Cells(i, 69 + j)).Delete (xlShiftUp)
Else
j = j + 4
End If
Loop
i = i + 1
Loop
【问题讨论】:
不要将递增循环计数器的语句粘贴在 if 语句中。除非您的代码始终执行语句的 else 部分,否则j
将停留在静态值并且永远不会达到 24。
为了更清楚,将DoEvents
和Debug.Print j
放在语句End If
和Loop
之间。在即时窗口中观察值j
这是个好主意,但我之所以这样做是因为我想继续检查我的行(因为它们正在被删除)以确保 ho 没有改变。所以只有在没有被删除的情况下才增加。对?也许我在这里错了?
当您删除行时,最好执行以例如开头的 反向迭代 i = 10,000
然后迭代 i = i - 1
。这是因为当你删除行时,行号会改变。否则,您必须考虑删除行中底部数据的行号变化。
您的声明 If 0 < ho < 3 Then
被解释为(我不记得会是哪个)If (0 < ho) < 3 Then
或 If 0 < (ho < 3) Then
。在任何一种情况下,它都会将 True/False 与数字进行比较。您可能希望将该语句更改为If 0 < ho And ho < 3 Then
。 (我不知道这是否是您的问题的原因,但这肯定意味着它没有按照您的预期进行。)
【参考方案1】:
改变你的 if 语句。当没有更多数据时,这将停止它。
If 0 < ho AND ho < 3 AND ho<>"" Then
【讨论】:
更正了我的答案 是的!这将停止无限循环。谢谢,我从没想过会弄乱我的 if 语句!但是,它并没有消除任何单元格……例如 0.3(ho 是双精度),并且应该消失的所有其他值都不会改变。我认为这可能是一个循环问题。今晚我会尝试 Anastasiya 的建议,因为我不确定发生了什么。我知道继续接下来的 4 列很奇怪,但这就是数据的结构。 如果它回答了你的问题,你能把它标记为答案吗?我没有关注您的其余问题(如果是一个),但也许是另一个完整的问题,我们中的一些人会有所帮助!祝你好运! 我觉得把它作为我的答案很奇怪,因为我的宏没有做任何事情或正常工作,但是是的,它确实修复了我的无限循环。以上是关于VBA excel删除无限循环的主要内容,如果未能解决你的问题,请参考以下文章