【问题标题】:Lock/Unlock One Cell Based on Value of Another Cell VBA根据另一个单元格 VBA 的值锁定/解锁一个单元格
【发布时间】:2018-05-26 03:58:41
【问题描述】:

我已经在这个网站和其他几个网站上阅读了大量关于这个的内容,但还没有找到一个非常有效的解决方案。

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

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

以下是我目前制作这项工作的尝试。

代码

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

代码

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

无法设置 Range 类的 Locked 属性。

【问题讨论】:

    标签: vba excel


    【解决方案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
    

    【讨论】:

    • 效果很好,谢谢!看起来我的 ActiveSheet.Protect 使用次数过多且位置错误。
    • 亲爱的 Colin,如果答案是 Ok,您需要标记它。您会在答案旁边找到一个刻度线,只需单击它即可。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-12
    • 2020-11-28
    • 2019-05-02
    • 2015-11-25
    相关资源
    最近更新 更多