Screen 2013中的ScreenUpdating = False失败

时间:2016-02-09 20:05:43

标签: excel vba excel-vba

我多年前开发并在Excel 2007和2010中运行良好的长期,高端的基于Excel的应用程序看起来像Excel 2013和2016中的业余小时,因为Application.ScreenUpdating = False不再可靠。

当VBA代码将预先格式化的工作表从宏工作簿复制到新工作簿时,屏幕显然会解冻,但其他情况也必须触发它。

我已经看到了关于这个主题的线程,建议“摆弄代码”或“在子程序中调用代码”。不幸的是,我必须维护数百个Excel应用程序,每个应用程序包含数千行代码和数百个即将迁移到Office 2016的用户,因此重写不是一种选择。我怎样才能恢复Excel以前的优雅?

5 个答案:

答案 0 :(得分:1)

我想留言,但我不允许这样做。如果没有代码示例,则很难理解您的问题(请参阅https://stackoverflow.com/help/how-to-ask并正确编辑您的问题。

以下是一些想法: - 检查您的代码是否在不同的过程中调用代码,可能是在过程之外打开了Application.ScreenUpdating。 - 在程序开始时尝试:

Application.Calculation = xlCalculationManual

然后,在代码结束时将其设置为:

Application.Calculation = xlCalculationAutomatic

这可能会有所帮助;但是,如果没有代码示例,很难正确地帮助您。

答案 1 :(得分:1)

这是一种有助于减少闪烁并保留StatusBar消息的技术。

Application.Cursor = xlWait
Application.ScreenUpdating = False
. . .
Set wkbNewBook = Workbooks.Add
ThisWorkbook.Windows(1).Visible = False
. . .
ThisWorkbook.Windows(1).Visible = True
wkbNewBook.Activate
Application.ScreenUpdating = True
Application.Cursor = xlDefault

答案 2 :(得分:1)

我们已经处理这个问题很长时间了,因为我的工具确实显示了实时动画图表,这些图表突然完全是静态的 - 我们会因为至少有一个闪烁的动画而死。

最初我们尝试通过强制屏幕更新来强制动画,但没有奏效。纯粹是巧合(复制粘贴太多次),我们偶然发现了一个同样令人难以置信的解决方案,因为它似乎确实有效。在每个 Application.ScreenUpdating = True 之后,我们添加了 x3 次 DoEvent。在某些系统上,x2 次 DoEvents 可以工作,但 x3 次在各种 office 版本上似乎确实更可靠。瞧,我们的动画又回来了:-)

Application.ScreenUpdating = True

DoEvents

DoEvents

DoEvents

我们没有在 Application.ScreenUpdating = False 语句中使用它,但它可能会在那里发挥一些作用。无论如何,我们希望这条道路可以帮助你们中的一些人找到创造性的功能解决方案!

答案 3 :(得分:0)

在浏览了很多论坛后,我认为闪烁问题与SDI和MDI有关。 有人建议将应用程序设置为不可见。

Application.Visible=False
enter code here
Application.Visible=True

这解决了我的闪烁问题,但我不喜欢excel应用程序如何完全消失然后突然重新出现给用户。

我能够通过使用这个“哪个窗口处于最顶层”问题的解决方法来解决我喜欢的问题。

单独离开主窗口,并强制其他工作簿变得不可见,让代码运行,然后将它们恢复到可见状态,它就会停止闪烁。

Application.Workbooks("yourworkbooktohide").Windows(1).Visible = False

请记住将它带回= true。

同样,我的脚本在Excel 2010中运行得很好,但在“升级”到2013之后,这个闪烁问题开始了。

答案 4 :(得分:0)

对我来说,仅“ Application.ScreenUpdating = False”不能完全解决闪烁问题。 计算也引起闪烁。 添加“ Application.Calculation = xlCalculationManual”解决了闪烁的问题。 因此,代码应类似于:

Application.ScreenUpdating = False Application.Calculation = xlCalculationManual

...此处的重要代码。...

Application.ScreenUpdating = True Application.Calculation = xlCalculationAutomatic

Nico Mijnster。