在Excel中dynamiclocking单元格

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

我该怎么做呢?

这是一个办法来做你所要求的。 (或者至less我认为你在问什么。)

首先,解锁表格中的所有单元格。 默认情况下,它们全部处于locking状态(尽pipe直到实际上保护表单才会生效),因此您需要先解锁它们,否则一旦保护完成,您将无法在任何位置input任何数据片。 您可以手动执行此操作(在2003中:select所有单元格,格式>单元格>保护>取消选中“locking”)或使用VBA,如下所示:

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

以上只需要执行一次。

然后,您必须使用Worksheet_Change事件dynamiclocking和解锁单元格。 在你的工作表模块中,写下这段代码:

 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中写入数据; 这将locking单元格B1,B3和B4,以便无法input数据。 如果您稍后决定清除单元格B2,则会解锁B1,B3和B4。