状态栏和ScreenUpdate在Excel 2013(StatusBar and ScreenUp

2019-10-21 15:59发布

我刚刚得到到Excel 2013和我注意到在宏如何工作的一些差异(因为微软不能离开一件好事孤独)。

我一直使用Application.ScreenUdpdating = False ,在长宏的速度运行时间的开始。 一般来说,在这些情况下,我也用Application.StatusBar = "random text based on macro"给自己(或其他用户)这是怎么回事和/或有多少工作是留给宏来完成一些感觉。

在2013年,我已经学会(从Application.Statusbar未按预期在Excel 2013 )认为DoEvents现在需要。 然而,当我在添加DoEvents后,我的状态栏更新,似乎把屏幕更新回来,除非外界的Excel窗口(例如,打开的文件资源管理器窗口)中给出的焦点。

我注意到的另一个问题是,随着代码的DoEvents我似乎无法打破宏观手动(即持有ESC不会停止代码)。

所以有几个问题:A)是的DoEvents真正需要的? B)是否有办法防止ScreenUpdates从得到的DoEvents回头“上”? C)你怎么手动破解代码与它的DoEvents运行?

我可以提供当前的宏观我的工作是否会有所帮助,但因为我更感兴趣的一般概念,我不想提供任何细节的读者中陷入了下来。

提前致谢!

Answer 1:

我今天遇到了类似的问题,所以我想我会分享我发现在调试问题:

对我来说,我注意到,在状态栏被恢复到以前的状态栏的方法,而我的宏被运行。 我发现,旧的信息是印在我禁用屏幕更新的最后状态栏消息。 然而,新的状态栏消息被打印暂时使屏幕更新并没有阻止显示新邮件。 我追踪的问题在我运行使用可执行的宏现货:

Set wsh = VBA.CreateObject("WScript.Shell")
errorCode = wsh.Run(exeCMD, windowStyle, waitOnReturn)

看来,调用可执行扰乱了状态栏显示和Excel回复到显示任何状态屏幕更新被禁用之前巴消息被示出。 为了解决这个问题我激活屏幕更新运行可执行文件,然后禁用屏幕更新一次的可执行文件运行前:

Set wsh = VBA.CreateObject("WScript.Shell")
Application.ScreenUpdating = True
errorCode = wsh.Run(exeCMD, windowStyle, waitOnReturn)
Application.ScreenUpdating = False

希望这可以帮助一个人在那里。



文章来源: StatusBar and ScreenUpdate in Excel 2013