none
使用Excel的VBA中Protect函数和Unprotext函数会切换工作表的问题 RRS feed

  • 问题

  • 如题,
    例如,现在有Sheet1、Sheet2、Sheet3共三个工作表,其中Sheet1是Active的,Sheet2是被保护的
    此时运行VBA代码,若运行到以下语句:

    Sheet2.Unprotect
    会出现这样的现象:Excel瞬间切换到Sheet2,然后再切换回Sheet1(似乎对工作表的保护和取消保护都必须是在Active状态下进行的样子)。
    这是在Excel2007下出现的,貌似Excel2003也是这样的。
    不知道算不算是Bug,
    如果Sheet2是有保护的,VBA代码需要修改Sheet2的单元格或者控件值,则需要Unprotect和Protect各一次,这样就出现Excel两次切换工作表的问题,感觉是看花眼了。
    如果修改数据前运行语句Sheet2.Activate,虽然可以解决问题,但是又发现修改数据的速度非常慢,速度远远低于Sheet2在后台的时候(虽然Excel切换了2次工作表)。
    这个……真是让人为难,请教各位高手,有没有什么解决的方法呢?

    谢谢:)
    编程是永无止境的,向大家学习
    2009年9月6日 13:56

答案

  • 在模块开始的位置插入语句Application.ScreenUpdating=False呢
    Microsoft Technet Observer 如果问题没有解决,请继续跟帖讨论;如果问题得到解决,请标记为答复。
    2009年9月7日 5:23
    版主

全部回复

  • 在模块开始的位置插入语句Application.ScreenUpdating=False呢
    Microsoft Technet Observer 如果问题没有解决,请继续跟帖讨论;如果问题得到解决,请标记为答复。
    2009年9月7日 5:23
    版主
  • 效果好很多,解决了执行效率的问题,谢谢。
    不过还有点美中不足的是:在用VBA代码修改单元格大小时,会导致整个工作表包括其上的空控件自动更新(表现为闪烁一下),这个Application.ScreenUpdating=False的方法也不管用了。高手指点一下呀,有什么解决办法呢?


    编程是永无止境的,向大家学习
    2009年9月7日 14:59
  • 在模块开始的位置插入语句Application.ScreenUpdating=False呢
    Microsoft Technet Observer 如果问题没有解决,请继续跟帖讨论;如果问题得到解决,请标记为答复。

    高手!
    2009年9月8日 12:16