首页 > 解决方案 > Do While 循环中的宏冻结

问题描述

我的工作簿中有大约 30 个工作表,我想对位于我的标志(开始和结束)之间的工作表进行一些操作。但有时(约 80% 的机会)我的宏在循环中冻结(无响应状态)。有时我可以打破它,按“调试”,按 F5 并正确结束宏。它可以正常工作,如果我在循环开始时设置断点并在每个循环中按 F5。但是如果我运行没有断点的宏 - 它冻结为什么会发生?我如何优化我的代码?

这是我的代码

Sub DataPreparation()
Dim ws As Worksheet

ClearData

rowToEnter = 2
Worksheets("Start").Activate
Do While Not Sheets(ActiveSheet.Index + 1).Name Like "End*"
    If ActiveSheet.Visible = True Then
        Sheets(ActiveSheet.Index + 1).Activate
        *SOME PROCEDURES*
    End If
Loop

DeleteEmptyRows

End Sub

标签: vba

解决方案


你在循环中所做的一切都在里面

If ActiveSheet.Visible = True Then
    Sheets(ActiveSheet.Index + 1).Activate
    *SOME PROCEDURES*
End If

因此,当条件不成立时,循环什么也不做,因此永远不会进行。

可能正确的做法是Sheets(ActiveSheet.Index + 1).Activate在 if 条件之前移动。


推荐阅读