ven*_* ch 0 excel vba excel-vba
我有四列(A,B,C,D).我的要求是在每一行中,只有一个单元格应该接受数据,其余单元格不应该接受数据(即其余三个单元格应该处于锁定模式).
我该怎么做呢?
这是一种做你要求的方法.(或者至少我认为你在问什么.)
首先,解锁工作表中的所有单元格.默认情况下,它们都处于锁定状态(虽然这实际上保护了工作表后才会生效)所以你需要先解锁它们,否则一旦你保护它就无法在任何地方输入任何数据.片.您可以手动执行此操作(在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.