在Excel 2013和2016中,ScreenUpdating = False失败

由于Application.ScreenUpdating = False不再可靠地工作,因此多年前我开发的运行良好且基于Excel的高级应用程序在Excel 2007和2010中运行良好,看起来像Excel 2013和2016中的“业余小时”。 当VBA代码从macros工作簿复制一个预先格式化的工作表到一个新的工作簿,屏幕显然解冻,但其他情况也必须触发它。 我已经看到这个主题上的线程,build议“摆弄代码”或“在子程序中调用代码”。 不幸的是,我不得不维护几百个Excel应用程序,每个应用程序有成千上万行代码和数百个即将迁移到Office 2016的用户,因此重写不是一种select。 我怎样才能恢复Excel的以前的优雅?

我想留下评论,但我不能这样做。 没有代码示例,理解你的问题是非常困难的(请参阅https://stackoverflow.com/help/how-to-ask并适当地编辑你的问题。

这里有一些想法: – 检查你的代码是否在不同的过程中调用代码,也许在过程之外打开Application.ScreenUpdating。 – 在你的程序开始时试试这个:

Application.Calculation = xlCalculationManual 

然后,在代码的最后将其设置为:

 Application.Calculation = xlCalculationAutomatic 

这可能有帮助; 但是,没有代码示例,要很好地帮助您。

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

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

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

我能够解决这个问题,我喜欢通过使用一个解决方法,这是哪个窗口是最重要的问题。

通过离开主窗口,并强制其他工作簿不可见,让代码运行,然后将它们恢复可见,它停止闪烁。

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

只要记得把它带回=真。

再一次,我的脚本在Excel 2010中工作得很好,但是在“升级”到2013之后,这个闪烁问题就开始了。

这是一种有助于减less闪烁并保留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