【问题标题】:Locking specific cells in excel VBA锁定excel VBA中的特定单元格
【发布时间】:2017-10-13 23:32:04
【问题描述】:

我目前正在处理一个宏。

目的 目标是一旦 L 列中有值,我需要相关行中的单元格来锁定。但是,这不应该锁定整个工作表,只锁定单元格。

代码 下面是我一直在玩的代码。我正在尝试修改代码以实现上述目的。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Row = 1 Then
        If Target.Column = 3 Or Target.Column = 5 Then
            Beep
            Cells(Target.Row, Target.Column).Offset(0, 1).Select
        End If
    End If
End Sub

示例

如果L列

中有日期,将被锁定的单元格为黄色

锁定整个工作表无法解决问题的原因是任何其他用户将无法将自己的数据输入到工作表中。

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    除非您保护工作表,否则仅锁定单元格没有任何效果。首先,解锁工作表中的所有单元格,然后试试这个:

    Private Sub Worksheet_Change(ByVal Target As Range)
        If Target.Column <> 12 Or Target.Row = 1 Then Exit Sub
    
        Range(Cells(Target.Row, 2), Cells(Target.Row, 11)).Locked = True
        ActiveSheet.Protect
    End Sub
    

    【讨论】:

    • 谢谢你,但这会锁定工作表。这意味着无法将其他数据输入到 Excel 工作表中。
    • @James,你在运行之前解锁了工作表的所有单元格吗?
    【解决方案2】:

    使用实际密码更改第一行代码中的密码以取消保护工作表。

    Const PW As String = "123"
    
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.CountLarge > 1 Then Exit Sub
    Dim r As Long
    If Target.Column = 12 And Target.Row > 1 Then
        ActiveSheet.Unprotect Password:=PW
        r = Target.Row
        If Target <> "" Then
            Range("B" & r & ":K" & r).Locked = True
        Else
            Range("B" & r & ":K" & r).Locked = False
        End If
        ActiveSheet.Protect Password:=PW
    End If
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-11
      • 2015-08-07
      • 1970-01-01
      • 1970-01-01
      • 2017-03-23
      • 2011-03-03
      相关资源
      最近更新 更多