据我所知,Application.ScreenUpdating = true的值一直保持到设置Application.ScreenUpdating = false为止。但是,这种价值的“生命周期”是什么?是在调用该过程的过程开始并结束时,还是在打开工作表时?
制作了一个类,以使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新值(正确)
数据填充后,该值重置为False。
再次按下按钮,“ Actual”值为“ True not False”。
该类只对新值取反以定义恢复值,因此结果使我对生存期或应如何设置ScreenUpdating值感到困惑。
我在课堂上做错了事还是缺少一些基本理论?
类模块:ApplicationScreenUpdate
测试模块:测试
Test Sheet
TIA,奥斯卡。
最佳答案
据我所知,这是设计使然(但是我没有可引用的消息来源)。
虽然有经验的开发人员会期望保留设置,但是没有经验的开发人员可能不会意识到他们所做的事情,并且如果宏在完成宏后尝试将数据手动放入工作表中,就会认为excel被破坏了。
您可以尝试禁用应用程序事件,因为有时它们可以重置该值,也可以将更新设置为false后尝试写入一个值,但是我怀疑该值将在宏完成后出现。