ScreenUpdating = False在Excel 2013和2016中失败

2j4z5cfb  于 2023-11-20  发布在  其他
关注(0)|答案(6)|浏览(117)

我多年前开发的基于Excel的长期运行的高端应用程序在Excel 2007和2010中运行得很好,在Excel 2013和2016中看起来像业余时间,因为Application.ScreenUpdating = False不再可靠地工作。
当JavaScript代码将预格式化的工作表从宏工作簿复制到新工作簿时,屏幕显然会解冻,尽管其他情况也会触发它。
我已经看到了关于这个主题的建议“摆弄代码”或“在子例程中调用代码”的线程。不幸的是,我必须维护数百个Excel应用程序,每个应用程序都有数千行代码,还有数百个即将迁移到Office 2016的用户,所以重写不是一个选择。

kknvjkwl

kknvjkwl1#

以下是一些想法:

  • 检查您的代码是否调用了其他过程中的代码,可能Application.ScreenUpdating在过程外部已打开。
  • 在你的程序开始时试试这个:

应用程序.计算= xlCalculationManual
然后,在代码的末尾将其设置为:

Application.Calculation = xlCalculationAutomatic

字符串

jslywgbw

jslywgbw2#

这里有一个技术,有助于减少 Flink 和保留状态栏消息。

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

字符串

7ivaypg9

7ivaypg93#

我们已经处理这个问题很长一段时间了,因为我的工具确实显示了突然完全静态的实时动画图表-我们会因为至少有一个 Flink 的动画而死亡。
最初我们试图通过强制屏幕更新来强制动画,但这并不起作用。(复制粘贴太多次)我们偶然发现了一个解决方案,它看起来确实有效,但同样令人难以置信。在每个Application.ScreenUpdating = True之后,我们添加了x3次DoEvents。在某些系统上,x2次DoEvents可以工作,但在各种Office版本上,x3次似乎更可靠。我们的动画回来了:-)

Application.ScreenUpdating = True

DoEvents

DoEvents

DoEvents

字符串
我们还没有在Application.ScreenUpdating = False语句中使用它,但它可能会在那里发挥一些魔力。

5tmbdcev

5tmbdcev4#

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

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

字符串
这解决了我的 Flink 问题,但我不喜欢excel应用程序完全消失,然后突然重新出现在用户面前。
我能够解决这个问题,我喜欢使用一个变通办法这个'窗口是顶部'的问题。
通过单独保留主窗口,并强制其他工作簿变为不可见,让代码运行,然后将它们恢复为可见,它停止了 Flink 。

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


记得带真的回来就行了。
同样,我的脚本在Excel 2010中工作得很好,但是在“升级”到2013之后,这个 Flink 问题开始了。

tzxcd3kk

tzxcd3kk5#

我也遇到了同样的问题,信不信由你,它是通过拔下并重新连接我的第二台显示器的电缆解决的。这条电缆使用的是HDMI到VGA转换器。

nszi6y05

nszi6y056#

对我来说,只有“Application.ScreenUpdating = False”没有完全治愈 Flink 。计算也会导致 Flink 。添加“Application.Calculation = xlCalculationManual”解决了 Flink 问题。所以,代码应该是这样的:
Application.ScreenUpdating = False Application.Calculation = xlCalculation Manual
重要的代码在这里…
Application.ScreenUpdating = True Application.Calculation = xlCalculation Automatic

相关问题