我有一个电子表格,其中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 *之类的范围,我不确定如何同时包含一个范围和另一个不在同一直接范围内的单元格。
答案 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