vba - 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
解决方案
你在循环中所做的一切都在里面
If ActiveSheet.Visible = True Then
Sheets(ActiveSheet.Index + 1).Activate
*SOME PROCEDURES*
End If
因此,当条件不成立时,循环什么也不做,因此永远不会进行。
可能正确的做法是Sheets(ActiveSheet.Index + 1).Activate
在 if 条件之前移动。
推荐阅读
- c++ - C++ std::vector initializer_list 重载歧义 (g++/clang++)
- linux - 从 vcard (*.vcf) 文件中提取姓名和电子邮件信息
- batch-file - 自动检测 USB 并将 sam 文件复制到 USB
- php - 使用键降序和值升序对数组进行排序
- r - R:使用其他数据框中的值来匹配行中的列值
- javascript - 如何使 JAWS 屏幕阅读器阅读标题文档以逐个字母而不是逐句阅读?
- c# - 为运行时已知的属性调用通用方法
- node.js - 如何获得开始和结束月份时的平均持续时间
- logging - serilog拦截日志和修改日志
- python - 随机列表生成器以 5 为增量,加起来为 100%