如何使用条件格式在另一个单元格(A2)中基于值(是/否)锁定/解锁单元格(A1)?
答案 0 :(得分:0)
网上有很多资源显示如何做到这一点。这篇文章有助于向我解释: http://database.ittoolbox.com/groups/technical-functional/excel-l/how-to-lockunlock-an-excel-cell-based-on-the-contents-of-another-cell-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是第7列)。两个赋值语句更改了范围的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