2009-04-15 100 views
1

我有两列,但我想要的编码是从一个单元格到另一个单元格进行评估。从邻近单元格的条件解锁单元格

第一列有单元格,其中有名称下拉验证,第二列只有在选择了相邻单元格中的特定名称时才会激活。

到目前为止,我只找到这个代码,但它似乎不工作:

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的方法,那会很好。

感谢您的帮助。

回答

2

Target参数告诉您正在更改的范围。

你需要做类似如下:

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 

请注意,您的目标范围可以超过一个细胞,所以你需要处理和测试这种情况下(使用复制/粘贴时,例如)。

调用相交可以返回目标范围和您有兴趣测试的范围(本示例中为A1:A10)的交集。 (0,1)

0
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方法就可以执行某些操作。不过你应该可以解锁所有其他的细胞。

0

该代码片段适合我。

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

相关问题