【发布时间】:2015-11-12 21:25:03
【问题描述】:
这是一个大宏的小问题,我正在阅读日志文件并通过将它们写入多个工作表来准备数据。我不想看到所有这些写作,所以我关闭了屏幕更新,但是我想看到一些进展,所以我不时切换屏幕更新我激活顶部工作表,在一些中写入一些进度数据单元格并再次关闭屏幕更新。这在 Excel 2010 中运行良好,但上周我升级到 Excel 2013 并且在宏完成之前没有更多可见的更新。我添加了 0.3 秒的暂停,但现在只更新时间,而不是处理的站点数量。有什么想法吗?
Application.ScreenUpdating = True 'To write the elapsed time and the number of found sites on the performance monitor sheet
PerfMon.Activate
PerfMon.Range("B4") = Now - StartPoint
PerfMon.Range("D4") = SiteCnt
Application.Wait (Now + (0.3 / 86400))
Application.ScreenUpdating = False
谢谢,汉斯
【问题讨论】:
-
我没有 2013,但也许可以尝试改用
StatusBar来跟踪进度。请参阅Chip Pearson's 页面或this page 了解一些想法。 (虽然我不确定StatusBar是否受到ScreenUpdating的影响,但我认为不会)。 -
这是一个意想不到的结局。不管怎样,我想说的是:非常感谢你们俩。两种解决方案都有效。我想 StatusBar 将是 MS 首选的解决方案,而 DoEvents 是我的。
-
DoEvents产生执行,以便操作系统可以处理其他事件。它的描述中有一个警告,但它是暂停主进程的标准方式,因此可以执行后台操作。 -
为了显示进度,我更喜欢使用无模式的用户表单。无模式的用户表单不需要用户采取任何行动,但宏可以写入。你可以有一个进度条,但我通常更喜欢信息显示。如果我正在处理 1,000 行,我将有包含“Row”、“of”和“1,000”的固定标签,以及一个我写入当前行号的标签,因此表单读取“Record N of 1,000”,N 从 1 到1,000。使用多阶段宏,我列出了所有阶段并通过它们报告进度。
标签: vba excel excel-2013