2013-02-13 92 views
3

据我所知,Application.ScreenUpdating = true值被保留,直到设置了Application.ScreenUpdating = false。但是,这个价值的“终生”是什么?在打开工作表时,是否在启动和结束时调用它的过程?Excel 2010中的Application.ScreenUpdating值的生命周期是什么?

制造类,以保持ScreenUpdating值一致,以我的需求:

  • 初始化类
  • 集ScreenUpdating =假
  • 在手术结束时或在错误的情况下恢复的值设置为True。

该类处理这种情况确定。

有时候需要相反:

  • 初始化类
  • 组ScreenUpdating =真
  • 在过程结束时或在错误的情况下的值恢复为False。

    我在这里遇到麻烦;该类正确地设置了ScreenUpdating = false的值,但是当类获得ScreenUpdating的“实际”值时,它始终为真。没有其他程序或插件可以改变这个值。

已经准备了test sheet以显示以上几点。从“suCaller”按钮上方的下拉菜单中选择ScreenUpdating的值。

  • 选择False并按下按钮。
  • 设置False之前的值为真如预期。
  • 测试数据从显示ScreenUpdating新值(False)的另一个过程填充。
  • 数据填充后,该值重置为True。
  • 再次按下按钮,'实际'值与预期一致为真
  • 做了很多次,值应该没问题。

现在选择True并按下按钮。设定真之前

  • 值为真如预期(其是从上方的值)
  • 测试数据被再次填充表示ScreenUpdating新值(真)
  • 数据填充之后,值被复位为假。
  • 再次按下按钮,'实际'值为真并非假

该类只会否定新值以定义恢复值,所以结果会使我在生命周期中感到困惑,或者应该如何设置ScreenUpdating值。

我在课上做错了什么或缺少一些基本理论?

类模块:ApplicationScreenUpdate

测试模块:测试

Test Sheet TIA,奥斯卡。

回答

0

据我所知,这是行为是由设计(但我没有一个可引用的来源)。

虽然经验丰富的开发人员会希望设置保持不变,但没有经验的开发人员可能不会意识到他们已经完成了什么,并且会认为如果他们在宏完成后手动将数据放入工作表中,Excel会被破坏。

你可以尝试的东西是禁用应用程序事件,因为有时他们可以重置值,也可以尝试在将更新设置为false后写入值,但是我怀疑该值会在宏完成后出现。

+0

嗨詹姆斯;不太关注你。但是从我的测试中可以看出,无论其他过程如何,Application.EnableEvents都会“永久”保留其值,直到您更改为止。您可以使用相同的类来测试它,只需使用EnableEvents更改对ScreenUpdating的所有引用即可。 – Oscar 2013-02-13 20:28:20

+0

其中一些事件会更改屏幕更新属性...所以这是一些尝试,但正如我最初所说,这种行为看起来是按设计进行的。 – 2013-02-15 22:02:04

0

已经发现ScreenUpdating或DisplayAlerts值的生存期是修改值的最高程序。在程序结束时;即使该值设置为false,此属性的值也会恢复为TRUE。

另一方面,EnableEvents或Calculation在过程结束时保留其值,修改值为TRUE或FALSE。

打开此workbook并运行以下顺序的方法:

  • TestFalse
  • TestCurrentValues
  • TestValues
  • TestCurrentValues
  • RestoreValues
  • TestCurrentValues

运行每种方法后,请参阅工作表中的值。

无法确认哪些应用程序属性会修改其他值的值。但是正如詹姆斯所写的那样,一些人改变了自己的价值'设计'