小弟现在遇到一个解锁工作表画面闪烁的问题
描述如下:
    工作簿中有2个工作表,现在需要
①在工作表1被激活(也就是前台表示)的时候锁定工作表1,使其不能被修改。
②在工作表2被激活(也就是前台表示)的时候解锁工作表1,使工作表2的vba程序能够修改工作表1的单元格中的内容。
工作表1的VBA代码如下
Private Sub Worksheet_Activate()
    'シートの保護
    Sheets(1).Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
End Sub
Private Sub Worksheet_Deactivate()
    'シート保護の解除
    Sheets(1).Unprotect
End Sub
现遇到的问题:
在工作表2被激活(也就是前台表示)的时候解锁工作表1处理中
首先鼠标点击工作表2的tab时画面会切换到工作表2,这时触发工作表1的Worksheet_Deactivate()事件
对工作表1进行解锁处理,此时画面会闪烁回工作表1进行处理,然后再回到工作表2的画面。各位高手没有办法让画面不闪烁就达到我要的效果呢?
我已经试过将解锁处理放到工作表2的Worksheet_Activate(),还是一样不起作用只要达到效果思路不限。小弟100分双手奉上

解决方案 »

  1.   

    加上Application.ScreenUpdating = False试试。
      

  2.   


    Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As LongDeclare Function LockWindowUpdate Lib "user32" (ByVal hwndLock As Long) As LongCall SendMessage(sheet.hwnd, WM_SETREDRAW, 0, 0&)
    Call SendMessage(sheet.hwnd, WM_SETREDRAW, 1, 0&)或者
    Call LockWindowUpdate(sheet.hwnd)
      

  3.   

    没办法了,我试着用Application.OnTime做一个延迟处理,还是会闪。看来是因为对工作表进行加锁、解锁,Excel要进行必要的画面更新,难以避免。
      

  4.   

    按3楼的方法,效果很好了呀.Private Sub Worksheet_Deactivate()
        Application.ScreenUpdating = False
        Sheets(1).Unprotect
    End Sub
      

  5.   

    在我这里,用5楼的方法比用3楼的方法效果要好点,但不能满意的是,切换工作表时鼠标会地闪动,也就是Excel在过程中不重画窗口,但会将鼠标短暂地改为“忙”,又迅速恢复正常状态,就造成一种闪动的现象。