【发布时间】:2014-06-24 18:59:55
【问题描述】:
每个人。我在 Excel 工作簿中有一个大型 VBA 模块,它从一堆其他远程工作簿中获取数据并将其复制到当前工作簿中。然后,它格式化和分析数据。所有这些都运行良好,除了可能需要一段时间,因为我在两个工作表中处理超过 30,000 行数据(并且每天都在增长)。
所以,我试图让它以百分比形式将进度放在“管理员”工作表的某个单元格中。这似乎也可以,但只是有时。在执行过程中,Excel(似乎是随机的)会跳过更新进度的.Value 代码行。有时,它会在大约四分之三的时间内更新,有时,它直到执行结束才更新。有谁知道为什么?下面是相关代码的总结。
<some code that declares variables and whatnot>
ThisWorkbook.Worksheets("Admin").Range("H18").Value = "Waiting..."
For Each rw In rng.Rows
<code that does the data-gathering and analysis>
progress = <code that returns a Double value>
ThisWorkbook.Worksheets("Admin").Range("H18").Value = progress & "% complete."
Next rw
ThisWorkbook.Worksheets("Admin").Range("H18").Value = "Done!"
<some cleanup code>
有时,“Waiting...”永远不会显示。其他时候,确实如此。 “完毕!”几乎总是在执行结束时显示,但 Admin!H18 并没有为很多很多循环更新,而且当它被跳过时,它永远不是同一组循环。计算仍在进行中(我认为),因为当它更新时,它会更新到正确的值。但它不会在每个循环期间更新单元格,只是更新其中的一些。
【问题讨论】:
-
Tim 在状态栏上的评论对于显示定期发生的进度是一个好主意。这是我经常使用的状态栏更新 VBA 的简短 sn-p 链接:stackoverflow.com/questions/22847329/…
-
蒂姆,您的状态栏建议非常有效。谢谢!我还将考虑将我的进度更新拆分到另一个子例程中,但由于我的代码比我介绍的要复杂得多,因此需要考虑一些因素。我想将您的评论标记为对问题的回答,但我不能,因为您将其改为评论。
-
将我的评论换成答案...