2013-07-08 54 views

回答

1

這是一個快速解決方案,我只是想出了...不漂亮,但它會做的伎倆:

首先運行該宏只有一次:

Sub LockOneTime() 
     ActiveSheet.Cells.Locked = False 
     ActiveSheet.Range("G1").Locked = True 
    End Sub 

然後把這個工作表代碼:

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Application.WorksheetFunction.CountA(Range("A1:E40")) > 0 Then 
     ActiveSheet.Protect contents:=True 
    Else 
     ActiveSheet.Protect contents:=False 
    End If 
    End Sub 

這是一個快速和骯髒的方式來獲得你希望達到什麼樣的...

編輯基於其他細胞被鎖定:

給您不能使用工作表保護avhieve你的目標,只要把你的工作表的代碼模塊中的代碼(您不再需要第一LockOneTime宏):

Private Sub Worksheet_Change(ByVal Target As Range) 

    If Not (Intersect(Target, Range("G1")) Is Nothing) Then 
     If Application.WorksheetFunction.CountA(Range("A4:E50")) > 0 Then 

      Application.EnableEvents = False 
      MsgBox "You cannot change the value in cell G1" 
      Application.Undo 
      Application.EnableEvents = True 

     End If 
    End If 

    End Sub 

這不會讓細胞G1發生變化,但它的缺點是,假設你改變了很多細胞而G1是其中之一,它不會讓任何變化發生......在換句話說,如果G1是被改變的單元之一,那麼沒有一個單元將被允許改變。

希望這可以由你,否則,代碼變得更復雜一點,涉及....

+0

我在哪裏放置LockOneTime子?我將把Worksheet_Change子放在「thisWorkbook」部分。 –

+1

在VBA中添加一個新模塊,並將'LockOneTime'放在那裏,然後運行它,然後你就可以擺脫它(或者只是手動解鎖表格中除'G1之外的所有單元格) - 另一個子模塊放入代碼模塊爲這張紙 - 不是工作簿! –

+0

太好了,謝謝哥們。現在嘗試... –