当所有行的某行的“是”为“是”时,锁定行中的选定单元

时间:2019-01-29 21:23:10

标签: excel vba range locking cell

我有一个电子表格,其中A列询问是/否问题,我需要电子表格来锁定该行的单元格C,D,E和J列。我需要在每一行上执行此操作。

因此,每一行都以相同的是/否问题开始,然后根据对是/否的回答,某些单元格被锁定或未锁定。

我一直在使用一些在网上找到的示例代码,但是它仅适用于特定行,并且我不确定如何应用于所有行。我发现的示例代码是:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Range("A*") = "Yes" Then
        Range("B1:B4").Locked = False
    ElseIf Range("A1") = "Refusing" Then
        Range("B1:B4").Locked = True
    End If
End Sub

我想知道如何创建通配符以将此代码应用于某个范围,以及如何锁定诸如单元格C *:E *,J *之类的范围,我不确定如何同时包含一个范围和另一个不在同一直接范围内的单元格。

1 个答案:

答案 0 :(得分:2)

尝试以下代码(未经测试)。如@Comintern所述,Target是已更改的范围。注意,范围可以是单个单元格。使用.Row属性返回已更改单元格的行。

Cells允许您将行和列定义为两个单独的值。并且Range可以与Cells结合使用以获得一定范围的单元格。

Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo esub   'If an error occurs reprotect the sheet
Me.Unprotect   'Remove sheet protection to avoid runtime error

If Target.Column=1 and Target.Value="Yes" Then
    Range(Cells(Target.Row,"C"),Cells(Target.Row,"E")).Locked=False
    Cells(Target.Row,"J").Locked=False

ElseIf Target.Column=1 and Target.Value="Refusing" Then
    Range(Cells(Target.Row,"C"),Cells(Target.Row,"E")).Locked=True
    Cells(Target.Row,"J").Locked=True
End If

esub:
Me.Protect    'Reprotect sheet
End Sub