在Excel中动态锁定单元格

时间:2012-03-13 15:12:33

标签: excel vba excel-vba

我有四列(A,B,C,D)。我的要求是,在每一行中,只有一个单元格应接受数据,其余单元格不应接受数据(即其余三个单元格应处于锁定模式)。

我该怎么做?

1 个答案:

答案 0 :(得分:7)

这是一种做你要求的方法。 (或者至少我认为你在问什么。)

首先,解锁工作表中的所有单元格。默认情况下,它们都处于锁定状态(虽然这实际上保护了工作表后才会生效)所以你需要先解锁它们,否则一旦你保护它就无法在任何地方输入任何数据。片。您可以手动执行此操作(在2003年:选择所有单元格,格式>单元格>保护>取消选中“已锁定”)或使用VBA,如下所示:

Sub UnlockAll()
    With Sheet1 ' Or whatever sheet you're working on
        .Unprotect
        .Cells.Locked = False
        .Protect
    End With
End Sub

以上只需要执行一次。

然后,您必须使用Worksheet_Change事件动态锁定和解锁单元格。在工作表的模块中,编写以下代码:

Private Sub Worksheet_Change(ByVal Target As Range)
    Me.Unprotect
    If Not IsEmpty(Target) Then
        'Data was added in target cell. Lock its neighbours.
        Me.Cells(Target.Row, 1).Resize(, 4).Locked = True
        Target.Locked = False
    Else
        'Data was erased from target cell. Release its neighbours.
        Me.Cells(Target.Row, 1).Resize(, 4).Locked = False
    End If
    Me.Protect
End Sub

假设您在单元格B2中写入数据;这将锁定单元格B1,B3和B4,以便不能输入数据。如果您以后决定清除B2,那么这将解锁B1,B3和B4。