2017-10-13 261 views
0

我有一个当前正在处理的宏。锁定Excel中的特定单元格VBA

目的 目的是,一旦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 

enter image description here

其将被锁定的细胞在黄色,如果在L列

之所以锁定整个工作表不会日期克服这个问题是因为任何其他用户将无法将自己的数据输入到工作表中。

回答

2

除非保护表单,否则仅锁定单元格不起作用。首先,解锁所有单元在片材,然后尝试这样:

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 
+0

非常感谢,但是这会锁定工作表。意思是没有其他数据可以输入到Excel工作表中。 – James

+0

@詹姆斯,你在运行之前解锁了工作表中的所有单元吗? – Mahesh

1

变化的代码与实际的密码的第一行中的密码取消保护片材。

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