据我所知,Application.ScreenUpdating = true值一直保持到设置Application.ScreenUpdating = false为止 . 但这个 Value 的“生命周期”是什么?它是在调用它的过程开始和结束时,同时打开工作表,还是?
制作一个类来保持ScreenUpdating值符合我的需求:
-
初级班
-
设置ScreenUpdating = False
-
在过程结束时或出现错误时将值恢复为True .
该类可以处理这种情况 .
有时需要相反:
-
初级班
-
set ScreenUpdating = True
-
在过程结束时或出现错误时将值恢复为False .
我在这里遇到麻烦;该类正确设置值ScreenUpdating = false,但是当类获得ScreenUpdating的“实际”值时,它始终为true . 没有其他程序或插件可以更改该值 .
已准备好test sheet以显示上述要点 . 从"suCaller"按钮上方的下拉列表中选择ScreenUpdating的值 .
-
选择False,然后按按钮 .
-
设置False之前的值是预期的True .
-
测试数据从显示ScreenUpdating新值(False)的另一个过程填充 .
-
数据填充后,该值将重置为True .
-
再次按下按钮 'Actual' value is True as expected .
-
做了很多次, Value 应该没问题 .
现在选择True,然后按按钮 .
-
设置前的值True为预期的True(这是上面的值)
-
再次填写测试数据,显示ScreenUpdating新值(True)
-
数据填充后,该值将重置为False .
-
再次按下按钮 'Actual' value is True not False .
该类只是否定了定义恢复值的新值,因此结果会使我在生命周期或如何设置ScreenUpdating值时感到困惑 .
我在班上做错了什么或遗漏了一些基本理论?
类模块:ApplicationScreenUpdate
测试模块:测试
Test Sheet TIA,奥斯卡 .
2 回答
据我所知,这是行为是设计的(但我没有可引用的来源) .
虽然经验丰富的开发人员希望设置保留,但缺乏经验的开发人员可能不会意识到他们已经完成了什么,如果他们在宏完成后尝试手动将数据放入工作表中,他们会认为excel被破坏了 .
您可以尝试的是禁用应用程序事件,因为有时它们可以重置值,您也可以尝试在将更新设置为false后尝试写入值,但我怀疑在宏完成后将显示该值 .
已经发现ScreenUpdating或DisplayAlerts值的生命周期是修改值的最高过程 . 在程序结束时;即使该值设置为false,此属性的值也会恢复为TRUE .
另一方面,EnableEvents或Calculation在修改值的过程结束时保留其值,为TRUE或FALSE .
打开此workbook并按以下顺序运行方法:
TestFalse
TestCurrentValues
TestValues
TestCurrentValues
RestoreValues
TestCurrentValues
运行每个方法后,请参阅工作表中的值 .
无法确认应用程序属性是否修改了其他属性的值 . 但正如詹姆斯写的那样,有些人会“改变设计”的 Value .