繁体   English   中英

使用条件格式锁定/解锁单元格

[英]Lock/Unlock a cell using conditional formatting

如何使用条件格式基于另一个单元格(A2)中的值(是/否)锁定/解锁单元格(A1)?

在线上有很多资源显示如何执行此操作。 这是一篇有助于向我解释的文章: http : //database.ittoolbox.com/groups/technical-functional/excel-l/how-to-lockunlock-an-excel-cell-based-on-the-contents-另一个单元的4625040

万一链接死了,这是要点:

若要执行您描述的操作,您将需要创建一个事件过程,只要工作表的内容发生更改,Excel就会调用该过程。 首先打开Visual Basic窗口(按Alt + F11)。 您应该在左上方的窗格中看到s树视图; 在该视图中找到工作表的名称,然后双击该名称。 这将在右侧的大窗格中打开与该工作表关联的代码模块。

在大窗格的顶部,您将看到两个下拉列表。 最初,左边的将显示(常规),而右边的将显示(声明)。 单击左侧列表右端的三角形箭头,然后选择“工作表”。

Excel将自动添加SelectionChange事件过程的“框架”。 那不是我们想要的,但这不会造成任何伤害。

Excel还将右侧下拉列表中的选择更改为SelectionChange。 打开该列表,然后选择“更改”。 Excel将添加第二个事件过程,该过程应如下所示:

Private Sub Worksheet_Change(ByVal Target As Range)

End Sub

闪烁的光标将位于此骨架的空白行上。

您想要向Worksheet_Change过程添加代码以检查G2单元格的内容,并更改G3:G66范围的状态。 这需要一个IF语句和几个赋值语句:

Private Sub Worksheet_Change(ByVal Target As Range)
    If ActiveSheet.Cells(2, 7).Text = "X" Then
        ActiveSheet.Range(Cells(3, 7), Cells(66, 7)).Locked = True
    Else
        ActiveSheet.Range(Cells(3, 7), Cells(66, 7)).Locked = False
    End If
End Sub

IF语句测试单元格G2的当前内容(Cells()方法采用行-2-和列号-7-标识单元格;列G为第七列)。 这两个赋值语句更改范围的Locked属性。 一个锁定单元格,另一个锁定单元格。

当然,如果您的代码更复杂,那么您将希望避免每次工作表上的任何内容更改时都运行它。 为了避免执行代码过于频繁,可以使用传递给事件过程的Target参数:

If Intersect(ActiveSheet.Cells(2, 7), Target) _
    Is Not Nothing Then

此条件语句使用Intersect()函数来确定单元格G2(ActiveSheet.Cells(2,7))是否包含在Target中。

因此,完整的事件过程如下所示:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(ActiveSheet.Cells(2, 7), Target) Is Not Nothing Then
        If ActiveSheet.Cells(2, 7).Text = "X" Then
            ActiveSheet.Range(Cells(3, 7), Cells(66, 7)).Locked = True
        Else
            ActiveSheet.Range(Cells(3, 7), Cells(66, 7)).Locked = False
        End If
    End If
End Sub

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM