从邻近的细胞解锁细胞的条件

我有两列,但我想要从一个细胞到另一个细胞的评估。

第一列的单元格有一个名字下拉validation,第二列只有在select了相邻单元格中的某个名字时才会激活。

到目前为止,我只发现这个代码,但它似乎并没有工作:

Private Sub Worksheet_Change(ByVal Target As Range) If Range("A1").Value = "Car" Then Range("B1").Locked = False Else Range("B1").Locked = True End If End Sub 

我需要这个代码(例如)A1:A10和B1:B10。

我希望我有道理。 如果没有VBA的方法,那就太好了。

谢谢您的帮助。

目标参数告诉你正在改变的范围。

你需要做如下的事情:

 Private Sub Worksheet_Change(ByVal Target As Range) Dim rng As Range Set rng = Intersect(Range("A1:A10"), Target) If rng Is Nothing Then ' Not updating the range we care about Exit Sub Else rng.Offset(0, 1).Locked = ... whatever ... End If End Sub 

请注意,您的目标范围可以是多个单元格(例如,使用复制/粘贴时),因此您需要处理和testing这种情况。

调用Intersect会返回目标范围和您有兴趣testing的范围(本示例中为A1:A10)的交集。

然后您可以使用.Offset(0,1)访问相应的相邻单元格。

该代码段完美地为我工作。

您是否将该代码放在适当的WorkSheet对象中? 如果你把它放到VBA模块中,它将不起作用。 当您在Visual Basic编辑器中时,查找标有“Microsoft Excel对象”的屏幕左侧的目录。 在该目录中应该是文件中每个工作表的WorkSheet对象。 双击其中之一来编辑该工作表的代码。 这是你的代码片断应该去的地方。

 Private Sub Worksheet_Change(ByVal Target As Range) If Range("A1").Value = "Car" Then Range("B1").Locked = False Me.Unprotect ("password") Else Range("B1").Locked = True Me.Protect ("password") End If End Sub 

使用Me.Protect使.Locked方法做一些事情。 你应该可以解锁所有其他的细胞。