在Excel中动态锁定单元格

ven*_* ch 0 excel vba excel-vba

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

我该怎么做呢?

Jea*_*ett 7

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

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

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

以上只需要执行一次.

然后,您必须使用该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
Run Code Online (Sandbox Code Playgroud)

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