Excel 2010中Application.ScreenUpdating值的生命周期是多少?

时间:2013-02-13 10:54:00

标签: excel-vba vba excel

据我所知,Application.ScreenUpdating = true值一直保持到设置Application.ScreenUpdating = false为止。但这个价值的“生命周期”是什么?是在调用它的过程开始和结束时,同时打开工作表,还是?

制作一个类以保持ScreenUpdating值符合我的需求:

  • 初级班
  • 设置ScreenUpdating = False
  • 在程序结束时或出现错误时将值恢复为True。

该类可以处理这种情况。

有些时候需要相反:

  • 初级班
  • 设置ScreenUpdating = True
  • 在程序结束时或出现错误时将值恢复为False。

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

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

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

现在选择True并按下按钮。

  • 设置True之前的值是预期的True(从上面开始的值)
  • 再次填写测试数据,显示ScreenUpdating新值(True)
  • 数据填充后,该值将重置为False。
  • 再次按下按钮,'实际'值为True而不是

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

我在课堂上做错了什么或遗漏了一些基本理论?

课程模块:ApplicationScreenUpdate

测试模块:测试

Test Sheet TIA,Oscar。

2 个答案:

答案 0 :(得分:0)

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

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

您可以尝试的是禁用应用程序事件,因为有时它们可​​以重置值,您也可以尝试在将更新设置为false后尝试编写值,但我怀疑在宏完成后将显示该值。

答案 1 :(得分:0)

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

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

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

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

运行每个方法后,请参阅表格中的值。

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