【问题标题】:Unlock cell on a condition from adjacent cell根据相邻单元格的条件解锁单元格
【发布时间】:2009-04-16 04:27:13
【问题描述】:

我有两列,但我想要的代码是从一个单元格到另一个单元格进行评估。

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

到目前为止,我只找到了这段代码,但它似乎不起作用:

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

感谢您的帮助。

【问题讨论】:

    标签: vba excel excel-formula


    【解决方案1】:

    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) 访问相应的相邻单元格

    【讨论】:

      【解决方案2】:

      该代码 sn-p 非常适合我。

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

      【讨论】:

        【解决方案3】:
        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 方法执行某些操作。不过,您可能应该解锁所有其他单元格。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-06-11
          • 2016-07-24
          • 1970-01-01
          • 2013-04-17
          相关资源
          最近更新 更多