3

据我所知,Application.ScreenUpdating = true 值会一直保持到 Application.ScreenUpdating = false 设置为止。但是这个值的“寿命”是多少?是在打开工作表的过程中开始和结束的过程,还是?

做了一个类来保持 ScreenUpdating 值与我的需求一致:

  • 初始化类
  • 设置 ScreenUpdating = False
  • 在程序结束或出现错误的情况下,将值恢复为 True。

该类可以处理这种情况。

有时需要相反:

  • 初始化类

  • 设置 ScreenUpdating = True

  • 在程序结束或出现错误的情况下,将值恢复为 False。

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

准备了一张测试表来显示以上几点。从“suCaller”按钮上方的下拉列表中选择 ScreenUpdating 的值。

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

现在选择 True 并按下按钮。

  • 设置 True 之前的值如预期的那样为 True(这是上面的值)
  • 再次填充测试数据,显示 ScreenUpdating 新值 (True)
  • 数据填充后,该值重置为 False。
  • 再次按下按钮,“实际”值为 True 而不是 False

该类只是否定新值来定义恢复值,所以结果让我对生命周期或如何设置 ScreenUpdating 值感到困惑。

我在课堂上做错了什么还是错过了一些基本理论?

类模块:ApplicationScreenUpdate

测试模块:测试

测试表 TIA,奥斯卡。

4

2 回答 2

0

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

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

您可以尝试禁用应用程序事件,因为有时它们可​​以重置该值,您也可能想在将更新设置为 false 后尝试写入一个值,但我怀疑该值会在宏完成后出现。

于 2013-02-13T11:19:10.613 回答
0

已发现 ScreenUpdating 或 DisplayAlerts 值的生命周期是修改该值的顶级过程。在程序结束时;即使该值设置为 false,此属性的值也始终恢复为 TRUE。

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

打开此工作簿并按以下顺序运行方法:

  • 测试假
  • 测试电流值
  • 测试值
  • 测试电流值
  • 恢复值
  • 测试电流值

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

无法确认应用程序属性会修改其他属性的值。但正如詹姆斯所写,有些人“通过设计”改变了自己的价值

于 2013-02-17T21:42:42.637 回答