【问题标题】:VBA Excel 2003 protect cells onclickVBA Excel 2003 保护单元格点击
【发布时间】:2012-12-05 17:14:53
【问题描述】:

我有一个电子表格,上面有一列(比如 A 列)。这个想法是这个列由具有各种分数的用户填充。一旦用户对 A 列中的答案感到满意,我希望他们确认答案是正确的(最好通过单击按钮)。单击该按钮后,我想使用 VBA 来保护 A 列不被再次编辑。我宁愿不使用保护工作表选项,因为电子表格中有其他数据,我需要将一些单元格锁定但可编辑(它们使用数据验证列表)。

我确实找到了这一点 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

【问题讨论】:

    标签: vba excel-2003


    【解决方案1】:

    如果您发布的内容适合您的需求,那么:

    在一个模块中,像这样:

    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
        ....
    

    【讨论】:

    • 谢谢,这很好用。我采纳了您的第二个建议,并让按钮在隐藏表中填充了一个单元格,这意味着我可以轻松解锁它以进行测试。
    猜你喜欢
    • 1970-01-01
    • 2018-05-14
    • 2019-03-28
    • 1970-01-01
    • 1970-01-01
    • 2015-08-23
    • 2010-09-12
    • 2020-11-10
    • 2017-02-22
    相关资源
    最近更新 更多