Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在excel VBA中锁定特定单元格_Vba_Excel - Fatal编程技术网

在excel VBA中锁定特定单元格

在excel VBA中锁定特定单元格,vba,excel,Vba,Excel,我有一个宏,我目前正在工作 目的 目标是,一旦L列中有一个值,我需要相关行中的单元格进行锁定。但是,这不应该锁定整个工作表,只锁定单元格 代码 下面是我一直在玩的代码。我正试图修改守则,以达到上述目的 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Row = 1 Then If Target.Column = 3 Or Target.Column = 5 Then

我有一个宏,我目前正在工作

目的 目标是,一旦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列中有日期,将被锁定的单元格将显示为黄色


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

除非保护工作表,否则仅锁定单元格无效。首先,解锁工作表中的所有单元格,然后尝试以下操作:

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
Private子工作表\u更改(ByVal目标作为范围)
如果Target.Column 12或Target.Row=1,则退出Sub
范围(单元格(Target.Row,2),单元格(Target.Row,11))。锁定=真
保护工作表
端接头

除非保护板材,否则仅锁定单元格无效。首先,解锁工作表中的所有单元格,然后尝试以下操作:

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
Private子工作表\u更改(ByVal目标作为范围)
如果Target.Column 12或Target.Row=1,则退出Sub
范围(单元格(Target.Row,2),单元格(Target.Row,11))。锁定=真
保护工作表
端接头

用实际密码更改第一行代码中的密码以解除工作表的保护

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
Const PW As String=“123”
私有子工作表_更改(ByVal目标作为范围)
如果Target.CountLarge>1,则退出Sub
变暗,变长
如果Target.Column=12且Target.Row>1,则
ActiveSheet.Unprotect密码:=PW
r=目标行
如果目标为“”,则
范围(“B”&r&“:K”&r).Locked=True
其他的
范围(“B”&r&“:K”&r).Locked=False
如果结束
ActiveSheet.Protect密码:=PW
如果结束
端接头

用实际密码更改第一行代码中的密码以解除工作表的保护

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
Const PW As String=“123”
私有子工作表_更改(ByVal目标作为范围)
如果Target.CountLarge>1,则退出Sub
变暗,变长
如果Target.Column=12且Target.Row>1,则
ActiveSheet.Unprotect密码:=PW
r=目标行
如果目标为“”,则
范围(“B”&r&“:K”&r).Locked=True
其他的
范围(“B”&r&“:K”&r).Locked=False
如果结束
ActiveSheet.Protect密码:=PW
如果结束
端接头

谢谢,但这会锁定工作表。这意味着不能在excel工作表中输入任何其他数据。@James,运行此操作之前是否已解锁工作表的所有单元格?谢谢,但这会锁定工作表。这意味着不能在excel工作表中输入其他数据。@James,在运行此操作之前,是否已解锁工作表中的所有单元格?