2012-12-05 41 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