2012-12-05 148 views
1

我有一個電子表格,其上有一列(比如列A)。這個想法是這個列由具有各種分數的用戶填充。一旦用戶對列A中的答案感到滿意,我希望他們確認答案是否正確(最好通過單擊按鈕)。點擊該按鈕後,我想使用VBA保護列A不被再次編輯。我寧願不使用保護工作表選項,因爲電子表格中有額外的數據,我需要保留一些單元格鎖定但可編輯(他們使用數據驗證列表)。VBA Excel 2003保護單元格onclick

我沒有找到VBA的此位,但是這是基於工作表的變化 - 如果我能以某種方式使用這一點,但只是把它激活,一旦用戶確認數據設置,這將是理想的:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)  
    If Intersect(Target, Range("A2:A14")) Is Nothing Then Exit Sub 
    Application.EnableEvents = False 
    MsgBox "Hey, leave me alone!", 48, "Sorry, I'm protected." 
    Application.Undo 
    Application.EnableEvents = True 
End Sub 

回答

3

如果你發佈什麼適合你的需求,那麼:

在模塊中,這樣的事情:

Public active As Boolean 
Sub Button1_Click() 
    active = True 
End Sub 

和電子表格的代碼中:

Private Sub Worksheet_Change(ByVal Target As Excel.Range) 
    If active Then 
     If Intersect(Target, Range("A2:A14")) Is Nothing Then Exit Sub 
     Application.EnableEvents = False 
     MsgBox "Hey, leave me alone!", 48, "Sorry, I'm protected." 
     Application.Undo 
     Application.EnableEvents = True 
    End If 
End Sub 

一個可能更好的解決方案將是您的工作表的按鈕填充,所以代碼實際上是這樣的內指定的小區:

If Range("A1") = "Locked" then 
    .... 
+0

謝謝,這個完美的作品。我採用了第二個建議,並讓按鈕在隱藏表格中填充一個單元格,這意味着我可以輕鬆解鎖以進行測試。 – bawpie