根据另一个单元格VBA的值锁定/解锁一个单元格

时间:2018-05-25 19:19:35

标签: excel vba excel-vba

我在这个网站和其他几个网站上做过相当多的阅读,但还没有找到一个可行的解决方案。

我有一个简单的计算器,用于工作,如果在D6中输入0以外的数值,我们需要锁定D7,如果值为零则解锁。如果在D7中输入0以外的值,则还锁定D6,如果值为零则解锁。这是一种循环......但是如果另一个单元格中有值,我不希望有人能够在一个单元格中输入值。

此外,除D4,D5,D6和D7外,工作表中的所有单元格始终处于锁定状态。 D4& D5将永远被解锁。

以下是我目前正在开展的工作。

CODE

Private Sub Worksheet_Change(ByVal Target As Range)

    If Range("D6").Value <> 0 Then
ActiveSheet.Unprotect ""
        Range("D7").Locked = True
    ElseIf Range("D6").Value = 0 Then
        Range("D7").Locked = False
ActiveSheet.Protect ""
    End If

    If Range("D7").Value <> 0 Then
ActiveSheet.Unprotect ""
        Range("D6").Locked = True
    ElseIf Range("D7").Value = 0 Then
        Range("D6").Locked = False
ActiveSheet.Protect ""
    End If
End Sub

CODE

问题是我在获得一个值后在D6中输入0时出错,然后在D6为0时在D7中输入值时,一般会出现错误。

无法设置Range类的Locked属性。

1 个答案:

答案 0 :(得分:1)

也许你想要这个

Private Sub Worksheet_Change(ByVal Target As Range)
    ActiveSheet.Unprotect ""
    If Range("D6").Value <> 0 Then
        Range("D7").Locked = True
    ElseIf Range("D6").Value = 0 Then
        Range("D7").Locked = False
    End If

    If Range("D7").Value <> 0 Then
        Range("D6").Locked = True
    ElseIf Range("D7").Value = 0 Then
        Range("D6").Locked = False
    End If
    ActiveSheet.Protect ""
End Sub