【问题标题】:What's the lifetime of Application.ScreenUpdating value in Excel 2010?Excel 2010 中 Application.ScreenUpdating 值的生命周期是多少?
【发布时间】:2013-01-28 21:36:41
【问题描述】:

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

创建一个类以保持 ScreenUpdating 值符合我的需求:

  • 初始化类
  • 设置 ScreenUpdating = False
  • 在程序结束或发生错误时将值恢复为 True。

该类处理这种情况正常。

有时需要相反:

  • 初始化类

  • 设置 ScreenUpdating = True

  • 在程序结束或发生错误时将值恢复为 False。

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

已准备好test sheet 以显示以上几点。从“suCaller”按钮上方的下拉列表中选择 ScreenUpdating 的值。

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

现在选择 True 并按下按钮。

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

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

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

类模块:ApplicationScreenUpdate

测试模块:测试

Test Sheet TIA,奥斯卡。

【问题讨论】:

    标签: excel vba


    【解决方案1】:

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

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

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

    【讨论】:

    • 嗨詹姆斯;不太关注你。但是从我的测试中,可以看出 Application.EnableEvents “永久”保持其价值,直到您更改它,无论其他程序做什么。您可以使用相同的类对其进行测试,只需使用 EnableEvents 更改对 ScreenUpdating 的所有引用。
    • 其中一些事件会更改 screenupdating 属性...所以可以尝试一下,但正如我最初所说的那样,这种行为看起来是设计使然。
    【解决方案2】:

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

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

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

    • TestFalse
    • TestCurrentValues
    • 测试值
    • TestCurrentValues
    • 恢复值
    • TestCurrentValues

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

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

    【讨论】:

      猜你喜欢
      • 2011-10-25
      • 1970-01-01
      • 2023-03-16
      • 2023-03-24
      • 2021-07-21
      • 2016-05-16
      • 1970-01-01
      • 1970-01-01
      • 2013-07-08
      相关资源
      最近更新 更多