Lock/Unlock 使用条件格式的单元格
Lock/Unlock a cell using conditional formatting
如何使用条件格式 Lock/Unlock 基于另一个单元格 (A2) 中的值 (yes/no) 的单元格 (A1)?
网上有很多资源展示了如何执行此操作。这是一篇帮助向我解释它的文章:
http://database.ittoolbox.com/groups/technical-functional/excel-l/how-to-lockunlock-an-excel-cell-based-on-the-contents-of-another-cell-4625040
如果 link 死了,这里是要点:
要执行您所描述的操作,您需要创建一个事件过程,只要工作表的内容发生更改,Excel 就会调用该过程。首先打开 Visual Basic window(按 Alt+F11)。您应该在左上角的窗格中看到 s 树视图;在该视图中找到工作表的名称,然后双击该名称。这将在右侧的大窗格中打开与该工作表关联的代码模块。
在大窗格的顶部,您将看到两个下拉列表。最初,左边的将显示 (General),而右边的将显示 (Declarations)。单击左侧列表右端的三角形箭头,然后单击 select Worksheet。
Excel 将自动添加一个 SelectionChange 事件过程的 "skeleton"。那不是我们想要的,但它不会伤害任何东西。
Excel 也会将右侧下拉列表中的 selection 更改为 SelectionChange。打开该列表并改为 select 更改。 Excel 将添加第二个事件过程,它应该如下所示:
Private Sub Worksheet_Change(ByVal Target As Range)
End Sub
blinking 光标将定位在该骨架的空行上。
您想将代码添加到 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
如何使用条件格式 Lock/Unlock 基于另一个单元格 (A2) 中的值 (yes/no) 的单元格 (A1)?
网上有很多资源展示了如何执行此操作。这是一篇帮助向我解释它的文章: http://database.ittoolbox.com/groups/technical-functional/excel-l/how-to-lockunlock-an-excel-cell-based-on-the-contents-of-another-cell-4625040
如果 link 死了,这里是要点:
要执行您所描述的操作,您需要创建一个事件过程,只要工作表的内容发生更改,Excel 就会调用该过程。首先打开 Visual Basic window(按 Alt+F11)。您应该在左上角的窗格中看到 s 树视图;在该视图中找到工作表的名称,然后双击该名称。这将在右侧的大窗格中打开与该工作表关联的代码模块。
在大窗格的顶部,您将看到两个下拉列表。最初,左边的将显示 (General),而右边的将显示 (Declarations)。单击左侧列表右端的三角形箭头,然后单击 select Worksheet。
Excel 将自动添加一个 SelectionChange 事件过程的 "skeleton"。那不是我们想要的,但它不会伤害任何东西。
Excel 也会将右侧下拉列表中的 selection 更改为 SelectionChange。打开该列表并改为 select 更改。 Excel 将添加第二个事件过程,它应该如下所示:
Private Sub Worksheet_Change(ByVal Target As Range)
End Sub
blinking 光标将定位在该骨架的空行上。
您想将代码添加到 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