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。 为了更清楚,将DoEventsDebug.Print j 放在语句End IfLoop 之间。在即时窗口中观察值j 这是个好主意,但我之所以这样做是因为我想继续检查我的行(因为它们正在被删除)以确保 ho 没有改变。所以只有在没有被删除的情况下才增加。对?也许我在这里错了? 当您删除行时,最好执行以例如开头的 反向迭代 i = 10,000 然后迭代 i = i - 1。这是因为当你删除行时,行号会改变。否则,您必须考虑删除行中底部数据的行号变化。 您的声明 If 0 &lt; ho &lt; 3 Then 被解释为(我不记得会是哪个)If (0 &lt; ho) &lt; 3 ThenIf 0 &lt; (ho &lt; 3) Then。在任何一种情况下,它都会将 True/False 与数字进行比较。您可能希望将该语句更改为If 0 &lt; ho And ho &lt; 3 Then。 (我不知道这是否是您的问题的原因,但这肯定意味着它没有按照您的预期进行。) 【参考方案1】:

改变你的 if 语句。当没有更多数据时,这将停止它。

If 0 < ho AND ho < 3 AND ho<>"" Then

【讨论】:

更正了我的答案 是的!这将停止无限循环。谢谢,我从没想过会弄乱我的 if 语句!但是,它并没有消除任何单元格……例如 0.3(ho 是双精度),并且应该消失的所有其他值都不会改变。我认为这可能是一个循环问题。今晚我会尝试 Anastasiya 的建议,因为我不确定发生了什么。我知道继续接下来的 4 列很奇怪,但这就是数据的结构。 如果它回答了你的问题,你能把它标记为答案吗?我没有关注您的其余问题(如果是一个),但也许是另一个完整的问题,我们中的一些人会有所帮助!祝你好运! 我觉得把它作为我的答案很奇怪,因为我的宏没有做任何事情或正常工作,但是是的,它确实修复了我的无限循环。

以上是关于VBA excel删除无限循环的主要内容,如果未能解决你的问题,请参考以下文章

请问excel表格如何设置成以下图片一样,无限循环,但是另一页插入表头,再延续序号

将 Excel 工作表转换为 PDF,无限循环错误

尝试删除字符时陷入无限循环

在无限循环中动态添加和删除类名

从代码中删除警报会强制其进入无限循环

删除无限循环的文件夹-删除递归文件夹