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 的情况下做到这一点,那就太好了。

谢谢您的帮助。

4

3 回答 3

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

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

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

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

于 2009-04-15T20:20:50.390 回答
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 方法执行某些操作。不过,您可能应该解锁所有其他单元格。

于 2009-04-15T19:55:11.997 回答
0

该代码片段非常适合我。

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

于 2009-04-15T20:02:43.333 回答