如何根据该行的单元格值动态锁定单元格?

时间:2014-01-07 11:14:29

标签: vba excel-vba excel-2010 excel

我做了一个简单的条件格式化     =$B7="PP"适用于=$F$7:$M$1000

如果选择“PP”,这将变为深灰色。

如果从F7:M1000中的任何位置的下拉列表中选择“PP”,我现在想要锁定单元格B7:B1000。我不希望任何人输入F7:M1000。我是VBA的初学者,所以如果可以通过VBA完成,那么简单的说明将帮助我做到这一点。

1 个答案:

答案 0 :(得分:3)

首先,解锁单元格B7:B1000。您希望用户始终能够编辑这些内容。

然后保护纸张。这将确保无法编辑锁定的单元格。 (如果工作表没有受到保护,那么单元格锁定或未锁定没有任何区别。)

然后在Sheet模块中添加:

Private Sub Worksheet_Change(ByVal Target As Range)

    On Error GoTo ErrorHandler
    Application.EnableEvents = False 'prevent infinite event loops

    Me.Unprotect ' else won't be able to modify locked cells

    If Not Intersect(Target, Range("B7:B1000")) Is Nothing Then
        'User edited a cell in this range.
        With Range("F1:M1").Offset(Target.Row - 1, 0)
            If Target.Value = "PP" Then
                .Interior.Color = RGB(200, 200, 200) 'gray
                .Locked = True
            Else
                .Interior.Color = RGB(255, 255, 255) 'white
                .Locked = False
            End If
        End With
    End If

ExitProcedure:
    Me.Protect
    Application.EnableEvents = True
    Exit Sub
ErrorHandler:
    MsgBox Err.Description 
    Resume ExitProcedure

End Sub