【问题标题】:Dynamically locking cells in ExcelExcel中动态锁定单元格
【发布时间】:2012-03-30 00:23:52
【问题描述】:

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

我该怎么做?

【问题讨论】:

  • 你的问题不是很清楚。您是否要锁定 3 列以使用户无法在这些列中输入任何内容?
  • 据我了解,您希望只允许修改组中 4 个单元格中的 1 个。即如果 Col C 有值,则将 A、B、D 留空。对吗?

标签: vba excel


【解决方案1】:

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

首先,解锁工作表中的所有单元格。默认情况下它们都处于锁定状态(尽管这在您真正保护工作表之前不会生效)因此您需要解锁它们才能开始,否则您将无法在任何地方输入任何数据一旦您保护了工作表床单。您可以手动执行此操作(在 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。

【讨论】:

  • 感谢 Jean-François Corbett,
  • 好答案,但我也希望其他列也具有相同的行为,即现在(AD)列具有该行为,类似我需要相同 Excel 表中的(MQ)列的相同行为
  • 看,我回答了这个问题。如果您有新问题,请接受此答案并发布新问题。也许在发布新问题之前,您可以尝试了解此解决方案,并将其调整为适用于 M-Q 和 A-D 列。
  • 此解决方案不起作用。当第五或第六左右有数据时......列开始的四列被锁定。
  • Thanq Jean 工作得很好。但是我的问题是即使我尝试在该单元格中输入某些内容,单元格是否被锁定,它也会显示预定义的警报,如何使用我自己的警报消息而不是那个。 Advanced Thanqs Jean 你帮了很多忙
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-07
相关资源
最近更新 更多